<?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>228308</bug_id>
          
          <creation_ts>2021-07-26 16:50:48 -0700</creation_ts>
          <short_desc>[WinCairo] New GraphicsLayer for GPU process mode</short_desc>
          <delta_ts>2021-10-31 17:57:18 -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>Compositing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779626</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-26 16:50:48 -0700</bug_when>
    <thetext>[WinCairo] New GraphicsLayer for GPU process mode

In GPU process mode, WebGL is run in GPU process. So, the
compositor (TextureMapper) should be run in GPU process.
Otherwise, the output texutre of WebGL has to be transferred from
GPU process to the compositor process (UI process or web
process).

BTW, Mac port is using IOSurface, GTK and WPE ports plan to use
DMA to transfer the texture beyond the process boundary.
https://eleni.mutantstargoat.com/git/?p=webkit_codecamp;a=blob;f=codecamp.pdf
https://eleni.mutantstargoat.com/hikiko/angle-dma/

Coordinated Graphics has been significantly changed since
r212608 (Bug 168514) removed multi-process mode of Coordinated
Graphics.

I&apos;m going to revive the architecture of the multi-process mode of
Coordinated Graphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779627</commentid>
    <comment_count>1</comment_count>
      <attachid>434257</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-26 16:51:22 -0700</bug_when>
    <thetext>Created attachment 434257
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780326</commentid>
    <comment_count>2</comment_count>
      <attachid>434501</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-28 23:43:29 -0700</bug_when>
    <thetext>Created attachment 434501
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780405</commentid>
    <comment_count>3</comment_count>
      <attachid>434501</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-29 09:44:38 -0700</bug_when>
    <thetext>Comment on attachment 434501
WIP patch

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

&gt; Source/WebCore/svg/graphics/SVGImage.cpp:283
&gt; +#if !USE(WC) // This code path causes incorrect SVG rendering

Please don&apos;t add platform #ifdefs in shared files. If this is wrong, we should figure out how to make it work. Perhaps `!context.hasPlatformContext()` is the wrong check.

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:146
&gt; +#if USE(WC)

&quot;WC&quot; is too short an acronym to be understandable. Please choose something longer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780537</commentid>
    <comment_count>4</comment_count>
      <attachid>434501</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-29 13:26:26 -0700</bug_when>
    <thetext>Comment on attachment 434501
WIP patch

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

&gt;&gt; Source/WebCore/svg/graphics/SVGImage.cpp:283
&gt;&gt; +#if !USE(WC) // This code path causes incorrect SVG rendering
&gt; 
&gt; Please don&apos;t add platform #ifdefs in shared files. If this is wrong, we should figure out how to make it work. Perhaps `!context.hasPlatformContext()` is the wrong check.

Yup. I should debug the SVG image issue or wait Myles to fix Bug#227748.

&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:146
&gt;&gt; +#if USE(WC)
&gt; 
&gt; &quot;WC&quot; is too short an acronym to be understandable. Please choose something longer.

Doesn&apos;t it match with USE(CA) and GraphicsLayerCA?
WC is a tentative name for prototyping, not a acronym of anything. OK. I should have a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801945</commentid>
    <comment_count>5</comment_count>
      <attachid>440578</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-07 23:42:15 -0700</bug_when>
    <thetext>Created attachment 440578
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804726</commentid>
    <comment_count>6</comment_count>
      <attachid>441343</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-15 00:47:15 -0700</bug_when>
    <thetext>Created attachment 441343
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805728</commentid>
    <comment_count>7</comment_count>
      <attachid>441642</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-18 15:15:07 -0700</bug_when>
    <thetext>Created attachment 441642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806113</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-19 10:09:04 -0700</bug_when>
    <thetext>Could you split this patch up? it&apos;s very large to review in one piece.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806272</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-19 13:34:31 -0700</bug_when>
    <thetext>Sorry. It&apos;s difficult to split the patch.
Could you review a part of the patch?
I will fix and ask a review again, so on..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806282</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-19 13:48:29 -0700</bug_when>
    <thetext>You could add the GraphicsLayer subclasses in a single patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806308</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-19 14:15:56 -0700</bug_when>
    <thetext>Only GraphicsLayerWC class?
It doesn&apos;t make sense without other parts, for example DrawingAreaWC and RemoteWCLayerTreeHost.
The core part of the patch is unsplittable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806316</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-19 14:25:18 -0700</bug_when>
    <thetext>New files can always be added in their own patches (admittedly, without testing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806348</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-19 15:02:53 -0700</bug_when>
    <thetext>I don&apos;t like the idea.
I think separately landing new files can&apos;t reduce the review cost.
I want to keep the patch compile-able, testable and meaningful.
If I will revise the patch for review points, I will want to/need to test the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807349</commentid>
    <comment_count>14</comment_count>
      <attachid>441642</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-10-21 13:57:29 -0700</bug_when>
    <thetext>Comment on attachment 441642
Patch

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

Just commenting on the WebCore specific portions. Overall seems fine and fits with what&apos;s already in the WebCore platform.

&gt; Source/WebCore/platform/graphics/wc/WCPlatformLayerGCGL.h:38
&gt; +    uint64_t m_graphicsContextGLIdentifier;

Any reason this isn&apos;t initialized to 0 so there&apos;s some way to check validity?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807352</commentid>
    <comment_count>15</comment_count>
      <attachid>441642</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-21 14:13:54 -0700</bug_when>
    <thetext>Comment on attachment 441642
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/wc/WCPlatformLayerGCGL.h:38
&gt;&gt; +    uint64_t m_graphicsContextGLIdentifier;
&gt; 
&gt; Any reason this isn&apos;t initialized to 0 so there&apos;s some way to check validity?

It is set by setGraphicsContextGLIdentifier immediately after constructed. But, it&apos;a good idea. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807354</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-21 14:17:18 -0700</bug_when>
    <thetext>Can m_graphicsContextGLIdentifier be an ObjectIdentifer&lt;&gt;? We&apos;re trying hard not to add any new bare uint64_t identifier types now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807364</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-21 14:37:27 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #16)
&gt; Can m_graphicsContextGLIdentifier be an ObjectIdentifer&lt;&gt;? We&apos;re trying hard
&gt; not to add any new bare uint64_t identifier types now.

Good point. I have to confess it&apos;s a slightly layer violation.
GraphicsContextGLIdentifier is in WebKit layer, but RemoteGraphicsContextGLProxyBase is in WebCore layer.
I think it can be solved by add a new virutal method to RemoteGraphicsContextGLProxyBase to create a WebGL platfrom layer.

#if USE(GRAPHICS_LAYER_WC)
   virutal createPlatformLayer() = 0;
#endif

Will try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807369</commentid>
    <comment_count>18</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-10-21 14:45:25 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #17)
&gt; (In reply to Simon Fraser (smfr) from comment #16)
&gt; &gt; Can m_graphicsContextGLIdentifier be an ObjectIdentifer&lt;&gt;? We&apos;re trying hard
&gt; &gt; not to add any new bare uint64_t identifier types now.
&gt; 
&gt; Good point. I have to confess it&apos;s a slightly layer violation.
&gt; GraphicsContextGLIdentifier is in WebKit layer, but
&gt; RemoteGraphicsContextGLProxyBase is in WebCore layer.
&gt; I think it can be solved by add a new virutal method to
&gt; RemoteGraphicsContextGLProxyBase to create a WebGL platfrom layer.
&gt; 
&gt; #if USE(GRAPHICS_LAYER_WC)
&gt;    virutal createPlatformLayer() = 0;
&gt; #endif
&gt; 
&gt; Will try.

The Cocoa port does have the concept of a WebGL layer. Not sure if it would be beneficial to turn it more of a cross-platform construct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807478</commentid>
    <comment_count>19</comment_count>
      <attachid>441642</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-10-21 17:56:25 -0700</bug_when>
    <thetext>Comment on attachment 441642
Patch

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

Will continue reviewing tomorrow. Overall happy just want to be thorough with it since its a huge change.

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:59
&gt; +            glContextHolder-&gt;context = GLContext::createContextForWindow(reinterpret_cast&lt;HWND&gt;(nativeWindow));

This should be WebCore::GLNativeWindowType to be cross platform. On Windows it should end up with HWND but other platforms seems like void* is the actual.

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.h:67
&gt; +    RefPtr&lt;WCSharedGLContextHolder::Holder&gt; m_sharedGLContextHolder;

I know that the Holder class is a wrapper around EGL in terms of the implementation but I don&apos;t think EGL Context should be in the name.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCSharedGLContextHolder.h:41
&gt; +class WCSharedGLContextHolder {

Maybe this should be named around the Scene since its the one using it? Maybe WCSharedSceneContext?

The GL is an implementation detail, and may change over time, so tying the method name to it isn&apos;t great.

Also not sure if this needs to be available publicly or if it can live inside the WCScene.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807563</commentid>
    <comment_count>20</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-22 00:22:33 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #18)
&gt; The Cocoa port does have the concept of a WebGL layer. Not sure if it would
&gt; be beneficial to turn it more of a cross-platform construct.

WebGLLayer is Cocoa-spefic. I don&apos;t think we can share.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807564</commentid>
    <comment_count>21</comment_count>
      <attachid>441642</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-22 00:27:21 -0700</bug_when>
    <thetext>Comment on attachment 441642
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:59
&gt;&gt; +            glContextHolder-&gt;context = GLContext::createContextForWindow(reinterpret_cast&lt;HWND&gt;(nativeWindow));
&gt; 
&gt; This should be WebCore::GLNativeWindowType to be cross platform. On Windows it should end up with HWND but other platforms seems like void* is the actual.

Will fix.

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/WCSharedGLContextHolder.h:41
&gt;&gt; +class WCSharedGLContextHolder {
&gt; 
&gt; Maybe this should be named around the Scene since its the one using it? Maybe WCSharedSceneContext?
&gt; 
&gt; The GL is an implementation detail, and may change over time, so tying the method name to it isn&apos;t great.
&gt; 
&gt; Also not sure if this needs to be available publicly or if it can live inside the WCScene.

I think we can change the code after someone will actually create TextureMapperDawn or TextureMapperD3D.
OK, I&apos;m going to create WCSceneContext and WCSharedSceneContextHolder.

I added a comment above to describe why this class is needed. Does it make sense?
That&apos;s the reason it can&apos;t live inside the WCScene.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808266</commentid>
    <comment_count>22</comment_count>
      <attachid>442326</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-24 14:52:04 -0700</bug_when>
    <thetext>Created attachment 442326
Patch

* Addressed review feedbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808279</commentid>
    <comment_count>23</comment_count>
      <attachid>442326</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-24 16:56:48 -0700</bug_when>
    <thetext>Comment on attachment 442326
Patch

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

&gt; ChangeLog:1
&gt; +2021-10-24  Fujii Hironori  &lt;Hironori.Fujii@sony.com&gt;

duplicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808619</commentid>
    <comment_count>24</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-25 15:08:11 -0700</bug_when>
    <thetext>Future Tasks

* sub-texture upload
  Implement GraphicsLayerWC::setNeedsDisplayInRect
* tiling scroll
* headless mode (Bug215041)
  composting in GPU process and reading back to shared memory and send to UI process
* async compositing
  Do not wait for finish compositing before starting painting the next frame
  Needs WebGL double buffering
* image layer
  Implement GraphicsLayerWC::setContentsToImage
* ASYNC_SCROLLING support
* video decoding in GPU process
* painting theme, scroll bar and controls in DisplayList mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809006</commentid>
    <comment_count>25</comment_count>
      <attachid>442326</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 13:34:45 -0700</bug_when>
    <thetext>Comment on attachment 442326
Patch

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

&gt; Source/WebCore/platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp:37
&gt; +    m_platformLayer = createPlatformLayer();

This code is crashing. It&apos;s too early to call the virtual method createPlatformLayer while constructing a base class.
I should add setPlatformLayer, and call it after the base class constructed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809012</commentid>
    <comment_count>26</comment_count>
      <attachid>442526</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 13:47:50 -0700</bug_when>
    <thetext>Created attachment 442526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809019</commentid>
    <comment_count>27</comment_count>
      <attachid>442526</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-26 14:07:06 -0700</bug_when>
    <thetext>Comment on attachment 442526
Patch

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

&gt; Source/WebCore/platform/graphics/RemoteGraphicsContextGLProxyBase.cpp:37
&gt; +#include &quot;TextureMapperPlatformLayer.h&quot; // ~RemoteGraphicsContextGLProxyBase needs it

Not sure we should add comments like this one. No guarantee it stays accurate over time.

&gt; Source/WebCore/platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp:50
&gt; +} // namespace WebCore
&gt; +#endif

Blank line

&gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:57
&gt; +        return 0;

nullptr

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:343
&gt; +    ASSERT_UNUSED(addResult, addResult.isNewEntry);

If we are asserting this, then I think we could use add instead of ensure above. The reason we use ensure is to optimize the case where the hash table already has a value at this key, but if that case represents an error, add is likely slightly more efficient in the non-error case and also more straightforward.

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:357
&gt; +    auto iter = m_remoteGraphicsContextGLMap.find(identifier);
&gt; +    if (iter == m_remoteGraphicsContextGLMap.end())
&gt; +        return nullptr;
&gt; +    return iter-&gt;value.get();

This can be written like this:

    return m_remoteGraphicsContextGLMap.get(identifier);

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:41
&gt; +using namespace WebCore;

This is an anti-pattern. Please don’t add it in new code, and use WebCore prefix as necessary.

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:43
&gt; +IPC::StreamConnectionWorkQueue&amp; remoteGraphicsContextGLStreamWorkQueue();

Why is this being declared here rather than in a header?

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:57
&gt; +    remoteGraphicsContextGLStreamWorkQueue().dispatch([scene = m_scene.get(), glContextHolder = m_sharedSceneContextHolder.get(), nativeWindow] {

This looks a little risky; what guarantees the lifetime of these captured values?

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:39
&gt; +using namespace WebCore;

Please don’t use this.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.h:32
&gt; +#include &lt;wtf/RefPtr.h&gt;

This include should not be needed. Forward.h should be enough to use RefPtr in just an argument type name.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.h:33
&gt; +#include &lt;wtf/Vector.h&gt;

This include should not be needed. Forward.h should be enough to use Vector in just an argument type name.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.h:58
&gt; +    typedef HashMap&lt;uint64_t, std::unique_ptr&lt;Layer&gt;&gt; LayerMap;

In new code, please use &quot;using&quot; instead of &quot;typedef&quot;.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCSceneContext.cpp:35
&gt; +using namespace WebCore;

Please don’t use this.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCSceneContext.h:42
&gt; +    WTF_MAKE_NONCOPYABLE(WCSceneContext);

Don’t really need this. Happens automatically if we have a std::unique_ptr data member without doing anything explicit.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCSceneContext.h:44
&gt; +    WCSceneContext(uint64_t nativeWindow);

explicit

&gt; Source/WebKit/UIProcess/wc/DrawingAreaProxyWC.cpp:39
&gt; +using namespace WebCore;

Please don’t add.

&gt; Source/WebKit/WebProcess/WebPage/wc/DrawingAreaWC.cpp:41
&gt; +using namespace WebCore;

Please no.

&gt; Source/WebKit/WebProcess/WebPage/wc/DrawingAreaWC.cpp:239
&gt; +    const size_t rectThreshold = 10;
&gt; +    const double wastedSpaceThreshold = 0.75;

Consider constexpr for these kinds of things in new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809121</commentid>
    <comment_count>28</comment_count>
      <attachid>442526</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 17:27:26 -0700</bug_when>
    <thetext>Comment on attachment 442526
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:41
&gt;&gt; +using namespace WebCore;
&gt; 
&gt; This is an anti-pattern. Please don’t add it in new code, and use WebCore prefix as necessary.

Really!? I didn&apos;t know that.
&quot;using namespace WebCore&quot; in the WebKit namespace is a pretty widely adopted common idiom in WebKit layer.
On the other hand, doing that in the global scope is the anti-pattern. (Bug 192449)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809127</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-26 17:33:45 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #28)
&gt; &quot;using namespace WebCore&quot; in the WebKit namespace is a pretty widely adopted
&gt; common idiom in WebKit layer.

Yes, one we are trying to get rid of; I remove them as often as possible. And I require not adding new ones.

&gt; On the other hand, doing that in the global scope is the anti-pattern. (Bug
&gt; 192449)

Yes, that one is even worse, a disaster for unified compilation, to be avoided at all costs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809128</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-26 17:34:06 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #29)
&gt; And I require not adding new ones.

*request*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809158</commentid>
    <comment_count>31</comment_count>
      <attachid>442526</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 19:31:37 -0700</bug_when>
    <thetext>Comment on attachment 442526
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:357
&gt;&gt; +    return iter-&gt;value.get();
&gt; 
&gt; This can be written like this:
&gt; 
&gt;     return m_remoteGraphicsContextGLMap.get(identifier);

It can&apos;t compile.
https://gist.github.com/fujii/1c3fc5fd0e8f67aa494370fd5adb02d9
It seems a problem of ScopedActiveMessageReceiveQueue or GenericHashTraits::peek.
This patch is too big. I will fix it in another patch later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809167</commentid>
    <comment_count>32</comment_count>
      <attachid>442526</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 20:04:46 -0700</bug_when>
    <thetext>Comment on attachment 442526
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:57
&gt;&gt; +    remoteGraphicsContextGLStreamWorkQueue().dispatch([scene = m_scene.get(), glContextHolder = m_sharedSceneContextHolder.get(), nativeWindow] {
&gt; 
&gt; This looks a little risky; what guarantees the lifetime of these captured values?

Good point.
Because ANGLE isn&apos;t thread-safe, they should be used only in the WebGL thread.
So, I designed WCScene and WCSceneContext classes completely thread-agnostic.
So, I don&apos;t want to make them ThreadSafeRefCounted.
That&apos;s the reason I pass the raw pointers of them here.
It actually looks risky code. However, lifetime of them are simple.
WCScene and WCSceneContext are destroyed in WebGL thread dipatched by RemoteWCLayerTreeHost destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809184</commentid>
    <comment_count>33</comment_count>
      <attachid>442568</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 22:34:50 -0700</bug_when>
    <thetext>Created attachment 442568
wrong patch

* Addressed review feedbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809185</commentid>
    <comment_count>34</comment_count>
      <attachid>442569</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-26 22:35:52 -0700</bug_when>
    <thetext>Created attachment 442569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810208</commentid>
    <comment_count>35</comment_count>
      <attachid>442569</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-10-29 13:22:14 -0700</bug_when>
    <thetext>Comment on attachment 442569
Patch

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

r=me with nits

&gt; Source/WebCore/PlatformWinCairo.cmake:28
&gt; +    platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp

Since this is agnostic and there is a reliance on TextureMapper maybe put these into the WebCore/platform/TextureMapper.cmake instead in an if block.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:85
&gt; +    for (auto&amp; layerUpdate : update.changedLayers) {

To confirm this is meant to be the same logic as GraphicsLayerTextureMapper::commitLayerChanges() correct?

Just wondering if there&apos;s a better way so you don&apos;t have to keep them in sync.

&gt; Source/WebKit/UIProcess/wc/DrawingAreaProxyWC.cpp:66
&gt; +    send(Messages::DrawingArea::DidUpdate());

Just double checking this but the expectation is that an update is always fired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810246</commentid>
    <comment_count>36</comment_count>
      <attachid>442569</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-29 14:22:32 -0700</bug_when>
    <thetext>Comment on attachment 442569
Patch

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

Thank you very much for the review.

&gt;&gt; Source/WebCore/PlatformWinCairo.cmake:28
&gt;&gt; +    platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp
&gt; 
&gt; Since this is agnostic and there is a reliance on TextureMapper maybe put these into the WebCore/platform/TextureMapper.cmake instead in an if block.

I plan to add WC.cmake when PlayStation port adopts GraphicsLayerWC.
Becuase  are also using TextureMapper, but I think they won&apos;t adopt GraphicsLayerWC.
I think TextureMapper.cmake isn&apos;t a good place to add.
It&apos;d be wonderful if AppleWin WK2, GTK and WPE will adopt GraphicsLayerWC in the future.

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:85
&gt;&gt; +    for (auto&amp; layerUpdate : update.changedLayers) {
&gt; 
&gt; To confirm this is meant to be the same logic as GraphicsLayerTextureMapper::commitLayerChanges() correct?
&gt; 
&gt; Just wondering if there&apos;s a better way so you don&apos;t have to keep them in sync.

Other GraphicsLayer implementations (GraphicsLayerCARemote, CoordinatedGraphicsLayer) also have the similar logic (RemoteLayerTreePropertyApplier::applyPropertiesToLayer, CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly).
But, I think it&apos;s difficult to sync them because they vary a lot.

WinCairo WK2 is still using GraphicsLayerTextureMapper in non-GPU process mode yet.
But, I plan to always enable GPU process mode for WinCairo WK2, and to remove WinCairo WK2 GraphicsLayerTextureMapper code because GPU process mode is promising and works very nice.
And, I&apos;d like to remove GraphicsLayerTextureMapper if we wil be able to remove WinCairo WK1.

&gt;&gt; Source/WebKit/UIProcess/wc/DrawingAreaProxyWC.cpp:66
&gt;&gt; +    send(Messages::DrawingArea::DidUpdate());
&gt; 
&gt; Just double checking this but the expectation is that an update is always fired.

Good question.
DrawingAreaWC sends DrawingAreaProxy::Update message to DrawingAreaWCProxy only when it want to update the screen in non-AC mode.
In AC mode, DrawingAreaWC needs to send DrawingAreaProxy::EnterAcceleratedCompositingMode message. But, I forgot to do it.
Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810532</commentid>
    <comment_count>37</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-31 17:56:48 -0700</bug_when>
    <thetext>Committed r285099 (243741@main): &lt;https://commits.webkit.org/243741@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810533</commentid>
    <comment_count>38</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-31 17:57:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/84864092&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434257</attachid>
            <date>2021-07-26 16:51:22 -0700</date>
            <delta_ts>2021-07-28 23:43:29 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2021-07-27T082740.diff</filename>
            <type>text/plain</type>
            <size>91415</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggZWZiYjM2ZmI1MWYwLi4yNWUzMzYwNGQ5MmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxX
aXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFC
bGVuZCkKIHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
MDsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNFKENBSVJPKQogICAgIGhkYyA9IGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggOWYwM2E4YTIwNWFhLi44YjhiY2Y1NjIz
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3Bw
CkBAIC0yODUyLDE1ICsyODUyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJyZW50RnJhbWUoV2ViCiAgICAgICAg
IEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCk7CiAKICAgICAgICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChjYWlyb0Zvcm1h
dCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAgICAgIGltYWdlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRh
dGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOwotCi0gICAgICAgIEZsb2F0
UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoaW1hZ2UpIHsK
LSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAg
ICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgICAgICAgICAgQ2Fpcm86
OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5W
QUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEp
LCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpKTsKKyAgICAgICAgICAgIGF1dG8g
aW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOworICAgICAgICAg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBj
b250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1JlY3Quc2l6ZSgpLCBkZXN0UmVjdCwg
c3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGlt
cGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggN2VkZDE0ODc5OWE5Li5mOTcwNGMxN2JkYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
Lmg+CiAjZW5kaWYKIAorI2lmIFVTRShXQykKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhv
c3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0zMTYsNiArMzIwLDE2IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Y29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiBjaGFubmVsTmFtCiAjZW5k
aWYKIH0KIAorI2lmIFVTRShXQykKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3Jl
YXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVu
dGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5lbnN1cmUoaWRlbnRpZmllciwgWyZdKCkgeworICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+KCp0aGlzLCBXVEZN
b3ZlKGlkZW50aWZpZXIpLCBuYXRpdmVXaW5kb3cpOworICAgIH0pOworICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisjZW5kaWYKKwogYm9vbCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgp
IGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBiODgyYWEwOTA3
MzcuLjkwMzE2N2UxZWQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC01Myw2ICs1MywxMCBAQAogI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIFVT
RShXQykKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5EYXRhOwpAQCAtODEsNiArODUsNyBAQCBjbGFzcyBSZW1vdGVSZW1vdGVDb21tYW5k
TGlzdGVuZXJQcm94eTsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiBjbGFzcyBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDsKIGNsYXNzIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXI7CitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlclByb3h5Owogc3RydWN0IEdQVVByb2Nlc3NDb25uZWN0aW9uUGFyYW1ldGVy
czsKIHN0cnVjdCBNZWRpYU92ZXJyaWRlc0ZvclRlc3Rpbmc7CkBAIC0yMTcsNiArMjIyLDEwIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+Jik7CiAgICAgdm9pZCBjb25maWd1cmVMb2dnaW5nQ2hhbm5lbChjb25zdCBTdHJp
bmcmLCBXVEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsKTsKIAorI2lmIFVTRShXQykKKyAg
ICB2b2lkIGNyZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisjZW5kaWYKKwogICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5h
bDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKQEAgLTI5Niw2ICszMDUsMTEgQEAgcHJpdmF0ZToKICAg
ICB1c2luZyBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXAgPSBIYXNoTWFwPFJlbW90ZUF1
ZGlvSGFyZHdhcmVMaXN0ZW5lcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVBdWRp
b0hhcmR3YXJlTGlzdGVuZXJQcm94eT4+OwogICAgIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5l
ck1hcCBtX3JlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcDsKIAorI2lmIFVTRShXQykKKyAg
ICB1c2luZyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgPSBIYXNoTWFwPFdDTGF5ZXJUcmVlSG9z
dElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+PjsKKyAg
ICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXA7Cisj
ZW5kaWYKKwogICAgIFJlZlB0cjxSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eT4gbV9y
ZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXI7CiAgICAgYm9vbCBtX2lzQWN0aXZlTm93UGxheWlu
Z1Byb2Nlc3MgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZl
NDhjYTIwYmEwOC4uZWYzMzhiMDFlMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpA
QCAtNTEsNiArNTEsOSBAQCBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdh
bnRzRGlzcGF0Y2hNZXNzYWdlIHsKICAgICBSZWxlYXNlUmVtb3RlQ29tbWFuZExpc3RlbmVyKFdl
YktpdDo6UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVySWRlbnRpZmllciBpZGVudGlmaWVyKQog
ICAgIFNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzKQog
ICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwgZW51bTp1aW50
OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxvZ0xldmVsIGxl
dmVsKQorI2lmIFVTRShXQykKKyAgICBDcmVhdGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykK
KyNlbmRpZgogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXll
clRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE2
MmZhZjY5N2JkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xh
eWVyVHJlZUhvc3QuaCIKKworI2lmIFVTRShXQykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJHTC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworc3RydWN0IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6TGF5ZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVy
KTsKK3B1YmxpYzoKKyAgICBMYXllcigpID0gZGVmYXVsdDsKKworICAgIFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJMYXllciB0ZXhtYXBMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHR1cmVNYXBwZXJMYXllcj4gYmFja2Ryb3BMYXllcjsKK307CisKK1JlbW90ZVdDTGF5ZXJU
cmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAgOiBtX2Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoY29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
Pm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
V0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJ
bnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBw
ZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIG1fY29udGV4dCA9IEdMQ29u
dGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVycHJldF9jYXN0PEhXTkQ+KG5hdGl2
ZVdpbmRvdykpOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKworUmVtb3RlV0NM
YXllclRyZWVIb3N0Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KCkKK3sKKyAgICBtX2Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhv
c3Q6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSkKK3sKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byBp
ZCA6IHVwZGF0ZS5hZGRlZExheWVycykgeworICAgICAgICBhdXRvIGxheWVyID0gbWFrZVVuaXF1
ZTxMYXllcj4oKTsKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBXVEZNb3ZlKGxheWVyKSk7Cisg
ICAgfQorCisgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJz
KSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOwor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVu
KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAo
bGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
Ok1hc2tMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIg
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAg
ICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5
ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRNYXNr
TGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAgICAgICByZXBsaWNhTGF5ZXIgPSAm
bV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5yZXBsaWNhTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVy
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UG9z
aXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24pOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRlLmFuY2hvclBvaW50KTsKKyAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXplKGxheWVyVXBkYXRlLnNpemUpOworICAgICAgICAg
ICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJvdW5kc09yaWdpbihsYXllclVwZGF0ZS5ib3VuZHNP
cmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUucHJlc2VydmVzM0QpOworICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c1JlY3QobGF5ZXJVcGRhdGUuY29udGVu
dHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c1Zpc2libGUpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29u
dGVudHNWaXNpYmxlKGxheWVyVXBkYXRlLmNvbnRlbnRzVmlzaWJsZSk7CisgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQor
ICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXll
clVwZGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCisgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0TWFza3NUb0JvdW5kcyhsYXllclVwZGF0ZS5tYXNrc1RvQm91bmRzKTsK
KyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5n
U3RvcmUpIHsKKyAgICAgICAgICAgIGF1dG8gYml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0
b3JlLmJpdG1hcCgpOworICAgICAgICAgICAgaWYgKGJpdG1hcCkgeworICAgICAgICAgICAgICAg
IGxheWVyLT5iYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdl
KCk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMo
Km1fdGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIGJpdG1hcC0+c2l6ZSgpLCB7IHsgfSwgYml0
bWFwLT5zaXplKCkgfSk7CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJh
Y2tpbmdTdG9yZShsYXllci0+YmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisgICAgICAgICAgICBsYXllci0+dGV4bWFw
TGF5ZXIuc2V0U29saWRDb2xvcihsYXllclVwZGF0ZS5zb2xpZENvbG9yKTsKKyAgICAgICAgaWYg
KGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpCisgICAg
ICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0RGVidWdWaXN1YWxzKGxheWVyVXBkYXRlLnNo
b3dEZWJ1Z0JvcmRlciwgbGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJVcGRhdGUu
ZGVidWdCb3JkZXJXaWR0aCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UmVwYWludENvdW50KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVy
LnNldFJlcGFpbnRDb3VudGVyKGxheWVyVXBkYXRlLnNob3dSZXBhaW50Q291bnRlciwgbGF5ZXJV
cGRhdGUucmVwYWludENvdW50KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpPcGFjaXR5KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dE9wYWNpdHkobGF5ZXJVcGRhdGUub3BhY2l0eSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICAgICAgbGF5ZXItPnRl
eG1hcExheWVyLnNldFRyYW5zZm9ybShsYXllclVwZGF0ZS50cmFuc2Zvcm0pOworICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3Jt
KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENoaWxkcmVuVHJhbnNmb3JtKGxh
eWVyVXBkYXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1h
cExheWVyLnNldEZpbHRlcnMobGF5ZXJVcGRhdGUuZmlsdGVycyk7CisgICAgICAgIGlmIChsYXll
clVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAg
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci5yZXNldCgpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllci0+YmFja2Ryb3BMYXllcikgeworICAgICAg
ICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlckxheWVyPigpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICAgICAgICAgICAgICBsYXll
ci0+YmFja2Ryb3BMYXllci0+c2V0Q29udGVudHNWaXNpYmxlKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNl
dEZpbHRlcnMobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzKTsKKyAgICAgICAgICAgICAgICBs
YXllci0+YmFja2Ryb3BMYXllci0+c2V0U2l6ZShsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNS
ZWN0LnJlY3QoKS5zaXplKCkpOworICAgICAgICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExheWVy
LT5zZXRQb3NpdGlvbihsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0LnJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRCYWNrZHJvcExheWVyKGxheWVyLT5iYWNrZHJvcExheWVyLmdldCgpKTsKKyAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGxheWVyVXBkYXRlLmJh
Y2tkcm9wRmlsdGVyc1JlY3QpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGlk
IDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7CisK
KyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBkYXRlLnJvb3RMYXllciktPnRl
eG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoTW9u
b3RvbmljVGltZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZXhwYW5kZWRJ
bnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1Np
emUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisgICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAg
IHJvb3RMYXllci0+cGFpbnQoKm1fdGV4dHVyZU1hcHBlcik7CisgICAgLy8gbV9mcHNDb3VudGVy
LnVwZGF0ZUZQU0FuZERpc3BsYXkoKm1fdGV4dHVyZU1hcHBlcik7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOworCisgICAgbV9jb250ZXh0LT5zd2FwQnVmZmVycygpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShXQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEyYmFj
MGRkNzQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFdDKQorCisjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBlcjsKK2Ns
YXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M7CitzdHJ1Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVl
SG9zdCA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dCk7CisKK3B1YmxpYzoKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciwgdWludDY0X3Qg
bmF0aXZlV2luZG93KTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0KCk7CisgICAgdm9pZCB1
cGRhdGUoV0NVcGF0ZUluZm8mJik7CisKK3ByaXZhdGU6CisgICAgLy8gSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzPiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRp
ZmllciBtX2lkZW50aWZpZXI7CisKKyAgICBzdHJ1Y3QgTGF5ZXI7CisgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXI+PiBMYXllck1hcDsKKyAgICBMYXll
ck1hcCBtX2xheWVyczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+
IG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4g
bV90ZXh0dXJlTWFwcGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxOTc4MTFiZDM5ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVX
Q0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFVTRShXQykKKworbWVzc2FnZXMg
LT4gUmVtb3RlV0NMYXllclRyZWVIb3N0IE5vdFJlZkNvdW50ZWQgeworICAgIFVwZGF0ZShzdHJ1
Y3QgV2ViS2l0OjpXQ1VwYXRlSW5mbyB1cGRhdGVJbmZvKQorfQorCisjZW5kaWYgLy8gVVNFKFdD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFp
bldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2lu
LmNwcAppbmRleCBmMDFlNjM5ZDlkNzguLjI3MjM0Y2JmYjVkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTMwLDE0ICsz
MCwzMSBAQAogCiAjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4uaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzLmgiCisjaW5jbHVkZSA8T2JqYmFzZS5oPgorI2luY2x1ZGUgPHd0Zi93aW4vU29m
dExpbmtpbmcuaD4KKworU09GVF9MSU5LX0xJQlJBUlkodXNlcjMyKTsKK1NPRlRfTElOS19PUFRJ
T05BTCh1c2VyMzIsIFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0LCBCT09MLCBTVERBUElD
QUxMVFlQRSwgKERQSV9BV0FSRU5FU1NfQ09OVEVYVCkpOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgR1BVUHJvY2Vzc01haW5XaW4gZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNz
TWFpbkJhc2VOb1NpbmdsZXRvbjxHUFVQcm9jZXNzPiB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0
Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFNldFByb2Nlc3NE
cGlBd2FyZW5lc3NDb250ZXh0UHRyKCkpCisgICAgICAgICAgICBTZXRQcm9jZXNzRHBpQXdhcmVu
ZXNzQ29udGV4dFB0cigpKERQSV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJfTU9OSVRPUl9BV0FSRV9W
Mik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9OwogCiBpbnQgR1BVUHJvY2Vzc01haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogeworICAgIC8vIGZvciBEaXJlY3RYCisgICAgSFJFU1VMVCBociA9
IDo6Q29Jbml0aWFsaXplRXgobnVsbHB0ciwgQ09JTklUX01VTFRJVEhSRUFERUQpOworICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgIHJldHVybiBBdXhpbGlhcnlQcm9jZXNz
TWFpbjxHUFVQcm9jZXNzTWFpbldpbj4oYXJnYywgYXJndik7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2lu
LmNtYWtlCmluZGV4IDAxNTY1ZDU1MDY5Ny4uZDU3MWI1NDUzOTNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExLDYgKzExLDggQEAgYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VC
S0lUKQogbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAogCisgICAgR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCisKICAgICBHUFVQcm9jZXNzL21lZGlhL3dp
bi9SZW1vdGVNZWRpYVBsYXllclByb3h5V2luLmNwcAogCiAgICAgR1BVUHJvY2Vzcy93aW4vR1BV
UHJvY2Vzc01haW5XaW4uY3BwCkBAIC02OSw2ICs3MSw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9T
T1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvd2luL1dlYnNpdGVEYXRhU3RvcmVX
aW4uY3BwCiAKKyAgICBVSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcAorCiAgICAg
VUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYkNv
bnRleHRNZW51UHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwCkBAIC03Niw2ICs4MCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlZp
ZXcuY3BwCiAKKyAgICBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eS5jcHAKKwogICAgIFdlYlByb2Nlc3MvR1BVL21lZGlhL3dpbi9WaWRlb0xheWVy
UmVtb3RlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0
ZWRCdW5kbGVXaW4uY3BwCkBAIC05NSw2ICsxMDEsMTAgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5n
QXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3BwCiAKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xh
eWVyRmFjdG9yeS5jcHAKKwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5j
cHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAtMTAyLDYg
KzExMiw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIGxpc3QoQVBQRU5EIFdl
YktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vzcy9n
cmFwaGljcy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9jbGFzc2lmaWVyIgogICAg
ICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vUGx1
Z2luUHJvY2Vzcy93aW4iCkBAIC0xMTksMTYgKzEzMCwyMyBAQCBsaXN0KEFQUEVORCBXZWJLaXRf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivc29ja2V0IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgog
ICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKKyAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKKyAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93YyIKICAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4iCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKICAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93
aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vd2luIgogKQogCitsaXN0KEFQUEVORCBXZWJLaXRfTUVT
U0FHRVNfSU5fRklMRVMKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJU
cmVlSG9zdAorKQorCiBzZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0
X0lOQ0xVREVfRElSRUNUT1JJRVN9KQogc2V0KFdlYktpdENvbW1vblN5c3RlbUluY2x1ZGVEaXJl
Y3RvcmllcyAke1dlYktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDQ2MDk5OWVmZjlhZi4uZjE1NDNi
MmVkMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTM0
NCw2ICszNDQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgICAgICAnV2ViS2l0OjpUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OlhSRGV2aWNlSWRlbnRpZmllcicsCiAgICAgXSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKaW5kZXggZTE1MGMzMTE1NGIzLi41ZTZhYjkzOTA0Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCkBAIC0zNyw3ICszNyw4IEBA
IGVudW0gRHJhd2luZ0FyZWFUeXBlIHsKICNlbmRpZgogICAgIERyYXdpbmdBcmVhVHlwZVJlbW90
ZUxheWVyVHJlZSwKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRV
UkVfTUFQUEVSKQotICAgIERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVkR3JhcGhpY3MKKyAgICBE
cmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZEdyYXBoaWNzLAorICAgIERyYXdpbmdBcmVhVHlwZVdD
UmVtb3RlCiAjZW5kaWYKIH07CiAgICAgCkBAIC02Myw2ICs2NCw3IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU+IHsKICAgICAgICAgLCBXZWJL
aXQ6OkRyYXdpbmdBcmVhVHlwZTo6RHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlCiAjZWxp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICAg
ICAgLCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6RHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWRH
cmFwaGljcworICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpEcmF3aW5nQXJlYVR5
cGVXQ1JlbW90ZQogI2VuZGlmCiAgICAgPjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmJjMDU5OTViMmQzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eVdDLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0RyYXdpbmdBcmVhUHJveHlXQzo6RHJhd2luZ0FyZWFQ
cm94eVdDKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVdDUmVtb3RlLCB3ZWJQ
YWdlUHJveHksIHByb2Nlc3MpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eVdDOjpzaXpl
RGlkQ2hhbmdlKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlR2Vv
bWV0cnkobV9zaXplKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdhNmVlYjBmODI0MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEcmF3aW5nQXJl
YVByb3h5V0MgZmluYWwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CitwdWJsaWM6CisgICAg
RHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYsIFdlYlByb2Nlc3NQcm94eSYpOworCitw
cml2YXRlOgorICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VD
bGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1w
bC5jcHAKaW5kZXggZWVjYTg0YjQ3YTY0Li43OWFhMDc3NmJkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlXQy5oIgog
I2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlXaW4uaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eVdpbi5oIgpAQCAtNDcsNiArNDgsOCBA
QCBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV2ViVmlldyYgdmlldykKIC8vIFBhZ2VD
bGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCiBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0Fy
ZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoV2ViUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzKQogeworICAgIGlmICgxKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxEcmF3aW5nQXJlYVByb3h5V0M+KCptX3ZpZXcucGFnZSgpLCBwcm9jZXNzKTsKICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcz4oKm1fdmll
dy5wYWdlKCksIHByb2Nlc3MpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjNj
OTMyNmVhYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2lmIFVTRShXQykKKworI2luY2x1ZGUgIkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhv
c3RNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQ
YWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gJmNvbnN0X2Nhc3Q8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkm
PigqdGhpcykuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisK
K0dQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlv
bikgeworICAgICAgICBhdXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgICAgIGdwdVByb2Nl
c3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CisgICAgICAgIC8vIGdwdVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgICAgIGdwdVBy
b2Nlc3NDb25uZWN0aW9uLmNvbm5lY3Rpb24oKS5zZW5kKAorICAgICAgICAgICAgTWVzc2FnZXM6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVdDTGF5ZXJUcmVlSG9zdCh3Y0xheWVy
VHJlZUhvc3RJZGVudGlmaWVyKCksIG1fcGFnZS5uYXRpdmVXaW5kb3dIYW5kbGUoKSksCisgICAg
ICAgICAgICAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7CisgICAgICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBtYWtlV2Vh
a1B0cihncHVQcm9jZXNzQ29ubmVjdGlvbik7CisgICAgfQorICAgIHJldHVybiAqbV9ncHVQcm9j
ZXNzQ29ubmVjdGlvbjsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Z3B1
UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYgcHJldmlvdXND
b25uZWN0aW9uKQoreworICAgIHByZXZpb3VzQ29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKnRoaXMp
OworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRyOworfQorCit1aW50NjRfdCBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdAoreworICAgIHJldHVybiB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQo
KTsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlKFdDVXBhdGVJ
bmZvJiYgdXBkYXRlSW5mbykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3Q6OlVwZGF0ZSh1cGRhdGVJbmZvKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVVNFKFdDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjBkYWJjM2MwODQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoV0MpCisKKyNpbmNsdWRlICJHUFVQ
cm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNz
IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHJpdmF0ZSBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eSk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkoV2ViUGFnZSYpOworCisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8m
Jik7CisKK3ByaXZhdGU6CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciB3Y0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93Y0xheWVyVHJlZUhvc3RJZGVudGlm
aWVyOyB9OworICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uJiBlbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpOworCisgICAgLy8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQg
Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFs
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxH
UFVQcm9jZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKKyAgICBXQ0xheWVy
VHJlZUhvc3RJZGVudGlmaWVyIG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmllciB7IFdDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBXZWJQYWdlJiBtX3BhZ2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShXQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVI
b3N0SWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93
Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi42NzhiN2JmZGI3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIu
aApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
V0MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworZW51bSBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBX
Q0xheWVyVHJlZUhvc3RJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxXQ0xheWVyVHJlZUhv
c3RJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
VVNFKFdDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCmluZGV4IGNkYmE1YWU2NThkZS4uMGEwZTZiMTVhYjMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCIKICNlbGlmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVh
V0MuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU3LDYgKzU4LDggQEAgc3Rk
Ojp1bmlxdWVfcHRyPERyYXdpbmdBcmVhPiBEcmF3aW5nQXJlYTo6Y3JlYXRlKFdlYlBhZ2UmIHdl
YlBhZ2UsIGNvbnN0IFdlYlBhZ2UKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwg
VVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWRH
cmFwaGljczoKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFDb29yZGluYXRl
ZEdyYXBoaWNzPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKKyAgICBjYXNlIERyYXdpbmdBcmVhVHlw
ZVdDUmVtb3RlOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVdDPih3ZWJQ
YWdlLCBwYXJhbWV0ZXJzKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggNzQ3NzFlYzQwY2NiLi4yMTU1NjA5
MTNhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaApAQCAtMTM2LDYgKzEzNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdlb21ldHJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplLCBib29sIGZsdXNoU3lu
Y2hyb25vdXNseSwgY29uc3QgV1RGOjpNYWNoU2VuZFJpZ2h0JiBmZW5jZVBvcnQpIHsgfQogI2Vu
ZGlmCiAKKyNpZiBVU0UoV0MpCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5KFdlYkNv
cmU6OkludFNpemUgdmlld1NpemUpIHsgfTsKKyNlbmRpZgorCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9pZCBsYXllckhvc3REaWRGbHVzaExheWVycygpIHsg
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCmluZGV4IDlkNWY2ZGNhNmUzOC4uNGEwMzgyODU2YWMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAtNDAsNiArNDAsMTAgQEAgbWVzc2FnZXMgLT4gRHJhd2lu
Z0FyZWEgTm90UmVmQ291bnRlZCB7CiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktp
dDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogI2VuZGlmCiAKKyNpZiBVU0UoV0MpCisgICAgVXBk
YXRlR2VvbWV0cnkoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBBZGp1c3RUcmFuc2llbnRab29tKGRv
dWJsZSBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgQ29tbWl0VHJhbnNp
ZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ1OTRiZTM0ZWQwZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0Ry
YXdpbmdBcmVhV0MuY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5o
IgorI2luY2x1ZGUgIldDTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKFdlYlBhZ2UmIHdlYlBhZ2Us
IGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgOiBEcmF3
aW5nQXJlYShEcmF3aW5nQXJlYVR5cGVXQ1JlbW90ZSwgcGFyYW1ldGVycy5kcmF3aW5nQXJlYUlk
ZW50aWZpZXIsIHdlYlBhZ2UpCisgICAgLCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQorICAg
ICwgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5Pih3ZWJQYWdlKSkKKyAgICAsIG1fY29udGV4dChtYWtlVW5pcXVlPFdDTGF5
ZXJGYWN0b3J5PigqdGhpcykpCisgICAgLCBtX3Jvb3RMYXllcihHcmFwaGljc0xheWVyOjpjcmVh
dGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcy0+bV9yb290TGF5ZXJDbGllbnQpKQorICAg
ICwgbV91cGRhdGVSZW5kZXJpbmdUaW1lcigqdGhpcywgJkRyYXdpbmdBcmVhV0M6OnVwZGF0ZVJl
bmRlcmluZykKKyAgICAsIG1fY29tbWl0UXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuV2ViQ29udGVudC5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5Db21taXRRdWV1
ZSJfcykpCit7CisgICAgd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNldEZvcmNlQ29t
cG9zaXRpbmdNb2RlKHRydWUpOworCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoImRyYXdpbmcgYXJlYSByb290IikpOworICAgIG1fcm9vdExheWVyLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9yb290TGF5ZXItPnNldENvbnRlbnRzT3BhcXVl
KHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAg
IG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworRHJhd2luZ0FyZWFXQzo6fkRy
YXdpbmdBcmVhV0MoKSA9IGRlZmF1bHQ7CisKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVSb290TGF5ZXJz
KCkKK3sKKyAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKKyAgICBpZiAo
bV9jb250ZW50TGF5ZXIpIHsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCptX2NvbnRlbnRMYXll
cik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICAgICAgY2hp
bGRyZW4uYXBwZW5kKCptX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKKyAgICB9CisKKyAgICBtX3Jv
b3RMYXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworfQorCit2b2lkIERyYXdp
bmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXll
cikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5
ZXJzKCk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworfQorCit2b2lkIERyYXdpbmdB
cmVhV0M6OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCBpc0Zyb3plbikKK3sKKyAgICBp
ZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9PSBpc0Zyb3plbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9IGlzRnJvemVuOworCisgICAgaWYgKCFtX2lz
UmVuZGVyaW5nU3VzcGVuZGVkICYmIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUpIHsKKyAg
ICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNlOworICAgICAgICBzdGFy
dFJlbmRlcmluZ1VwZGF0ZVRpbWVyKCk7CisgICAgfQorfQorCit2b2lkIERyYXdpbmdBcmVhV0M6
OnVwZGF0ZUdlb21ldHJ5KFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCit7CisgICAgbV93ZWJQ
YWdlLnNldFNpemUodmlld1NpemUpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFn
ZS5zaXplKCkpOworCisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworfQorCit2b2lkIERy
YXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgdHJpZ2dlclJlbmRlcmluZ1Vw
ZGF0ZSgpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fcm9vdExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworfQor
Cit2b2lkIERyYXdpbmdBcmVhV0M6OnNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBtX3Jv
b3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9sbFJlY3QpOworICAgIHRyaWdnZXJS
ZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzdGFydFJlbmRlcmlu
Z1VwZGF0ZVRpbWVyKCkKK3sKKyAgICBpZiAobV91cGRhdGVSZW5kZXJpbmdUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV91cGRhdGVSZW5kZXJpbmdUaW1lci5zdGFydE9u
ZVNob3QoMF9zKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp0cmlnZ2VyUmVuZGVyaW5nVXBk
YXRlKCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCkgeworICAgICAgICBtX2hh
c0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHN0YXJ0UmVuZGVyaW5nVXBkYXRlVGltZXIoKTsKK30KKworc3RhdGljIHZvaWQgZmx1
c2hMYXllckltYWdlQnVmZmVycyhXQ1VwYXRlSW5mbyYgaW5mbykKK3sKKyAgICBmb3IgKGF1dG8m
IGxheWVySW5mbyA6IGluZm8uY2hhbmdlZExheWVycykgeworICAgICAgICBpZiAobGF5ZXJJbmZv
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGltYWdlID0gbGF5ZXJJbmZvLmJhY2tpbmdTdG9yZS5pbWFnZUJ1ZmZlcigpKQorICAg
ICAgICAgICAgICAgIGltYWdlLT5jcmVhdGVGbHVzaGVyKCktPmZsdXNoKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUmVuZGVyaW5nKCkKK3sKKyAg
ICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCkgeworICAgICAgICBtX2hhc0RlZmVycmVkUmVu
ZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgbm90IHJlZW50cmFudCwgZS5nLiBhIHJBRiBjYWxsYmFjayBtYXkgZm9y
Y2UgcmVwYWludC4KKyAgICBpZiAobV9pblVwZGF0ZVJlbmRlcmluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gY2hhbmdlKG1faW5VcGRhdGVSZW5kZXJpbmcsIHRy
dWUpOworICAgIG1fd2ViUGFnZS51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICBtX3dlYlBhZ2UuZmx1
c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBPcHRpb25TZXQ8RmluYWxp
emVSZW5kZXJpbmdVcGRhdGVGbGFncz4gZmxhZ3M7CisgICAgbV93ZWJQYWdlLmZpbmFsaXplUmVu
ZGVyaW5nVXBkYXRlKGZsYWdzKTsKKworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUg
b3ZlcmxheSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3Jh
cGhpY3NMYXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmICht
X3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGUoeyB9KTsKKworICAgIG1fdXBkYXRlSW5mby5yb290TGF5ZXIg
PSBtX3Jvb3RMYXllci0+cHJpbWFyeUxheWVySUQoKTsKKworICAgIG1fY29tbWl0UXVldWUtPmRp
c3BhdGNoKFsmLCB1cGRhdGVJbmZvID0gc3RkOjpleGNoYW5nZShtX3VwZGF0ZUluZm8sIHsgfSld
KCkgbXV0YWJsZSB7CisgICAgICAgIGZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnModXBkYXRlSW5mbyk7
CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbJiwgdXBkYXRlSW5mbyA9IFdURk1v
dmUodXBkYXRlSW5mbyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBtX3JlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5LT51cGRhdGUoV1RGTW92ZSh1cGRhdGVJbmZvKSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZChXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgaWQpCit7CisgICAgbV91cGRhdGVJ
bmZvLmFkZGVkTGF5ZXJzLmFwcGVuZChpZCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3Jh
cGhpY3NMYXllclJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
IGlkKQoreworICAgIG1fdXBkYXRlSW5mby5yZW1vdmVkTGF5ZXJzLmFwcGVuZChpZCk7Cit9CisK
K3ZvaWQgRHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVwYXRlSW5m
byYmIGluZm8pCit7CisgICAgbV91cGRhdGVJbmZvLmNoYW5nZWRMYXllcnMuYXBwZW5kKFdURk1v
dmUoaW5mbykpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IERyYXdpbmdBcmVh
V0M6OmNyZWF0ZUltYWdlQnVmZmVyRm9yTGF5ZXIoV2ViQ29yZTo6RmxvYXRTaXplIHNpemUpCit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZS5lbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHko
KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCAxLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKK30KKworRHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpSb290
TGF5ZXJDbGllbnQoV2ViUGFnZSYgd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQor
eworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6cGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3RUb1BhaW50LCBHcmFwaGljc0xheWVyUGFpbnRCZWhhdmlvcikKK3sKKyAg
ICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmNsaXAocmVjdFRvUGFpbnQpOworICAgIG1f
d2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnBhaW50KGNvbnRleHQsIGVu
Y2xvc2luZ0ludFJlY3QocmVjdFRvUGFpbnQpKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30K
KworZmxvYXQgRHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2I4OTRmM2Q3MjFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5o
CkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEcmF3aW5nQXJlYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Rp
bWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eTsKK2NsYXNzIFdDTGF5ZXJGYWN0b3J5OworCitjbGFzcyBEcmF3aW5nQXJlYVdDIGZp
bmFsIDogcHVibGljIERyYXdpbmdBcmVhLCBwdWJsaWMgR3JhcGhpY3NMYXllcldDOjpDb29yZGlu
YXRvciB7CitwdWJsaWM6CisgICAgRHJhd2luZ0FyZWFXQyhXZWJQYWdlJiwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIH5EcmF3aW5nQXJlYVdDKCkgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBmb3JjZVJlcGFpbnRBc3luYyhXZWJQYWdlJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBkZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgc2V0TGF5ZXJU
cmVlU3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKKyAgICBib29sIGxheWVyVHJlZVN0YXRl
SXNGcm96ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzUmVuZGVyaW5nU3VzcGVuZGVk
OyB9CisgICAgdm9pZCB1cGRhdGVHZW9tZXRyeShXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKSBv
dmVycmlkZTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJXQzo6Q29vcmRpbmF0b3IKKyAgICB2b2lk
IGdyYXBoaWNzTGF5ZXJBZGRlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhcGhpY3NMYXllclJlbW92ZWQoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbW1pdExh
eWVyVXBhdGVJbmZvKFdDTGF5ZXJVcGF0ZUluZm8mJikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlckZvckxheWVyKFdlYkNvcmU6OkZs
b2F0U2l6ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZygpOworICAgIHZv
aWQgc3RhcnRSZW5kZXJpbmdVcGRhdGVUaW1lcigpOworCisgICAgY2xhc3MgUm9vdExheWVyQ2xp
ZW50IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgUm9vdExheWVyQ2xpZW50KFdlYlBhZ2UmKTsKKyAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdFRvUGFp
bnQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKKyAgICAg
ICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgV2Vi
UGFnZSYgbV93ZWJQYWdlOworICAgIH07CisKKyAgICBSb290TGF5ZXJDbGllbnQgbV9yb290TGF5
ZXJDbGllbnQ7CisKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5PiBtX3JlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXQ0xheWVyRmFjdG9y
eT4gbV9jb250ZXh0OworCisgICAgV2ViQ29yZTo6VGltZXIgbV91cGRhdGVSZW5kZXJpbmdUaW1l
cjsKKyAgICBib29sIG1faXNSZW5kZXJpbmdTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2luVXBk
YXRlUmVuZGVyaW5nIHsgZmFsc2UgfTsKKyAgICBXQ1VwYXRlSW5mbyBtX3VwZGF0ZUluZm87CisK
KyAgICBSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fY29udGVudExheWVyOworICAgIFJlZlB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIFJlZjxXb3Jr
UXVldWU+IG1fY29tbWl0UXVldWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVy
V0MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGI1OTc5NDA3
NzkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvR3JhcGhpY3NMYXllcldDLmNwcApAQCAtMCwwICsxLDQ1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK0dyYXBoaWNzTGF5ZXJXQzo6R3JhcGhpY3NMYXllcldDKFR5
cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIENvb3JkaW5hdG9yJiBj
b29yZGluYXRvcikKKyAgICA6IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpCisgICAg
LCBtX2Nvb3JkaW5hdG9yKGNvb3JkaW5hdG9yKQoreworICAgIG1fY29vcmRpbmF0b3IuZ3JhcGhp
Y3NMYXllckFkZGVkKHByaW1hcnlMYXllcklEKCkpOworfQorCitHcmFwaGljc0xheWVyV0M6On5H
cmFwaGljc0xheWVyV0MoKQoreworICAgIHdpbGxCZURlc3Ryb3llZCgpOworICAgIG1fY29vcmRp
bmF0b3IuZ3JhcGhpY3NMYXllclJlbW92ZWQocHJpbWFyeUxheWVySUQoKSk7Cit9CisKK0dyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBHcmFwaGljc0xheWVyV0M6OmdlbmVyYXRlTGF5ZXJJ
RCgpCit7CisgICAgc3RhdGljIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCA9IDE7
CisgICAgcmV0dXJuIGlkKys7Cit9CisKK0dyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBH
cmFwaGljc0xheWVyV0M6OnByaW1hcnlMYXllcklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllcklEOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sK
KyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7CisgICAgYWRkUmVw
YWludFJlY3QoeyB7IH0sIG1fc2l6ZSB9KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIFNob3Vs
ZENsaXBUb0xheWVyKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0
b3JlKTsKKyAgICBhZGRSZXBhaW50UmVjdChyZWN0KTsKK30KKworYm9vbCBHcmFwaGljc0xheWVy
V0M6OnNldENoaWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4pCit7
CisgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihX
VEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICByZXR1
cm4gY2hpbGRyZW5DaGFuZ2VkOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQo
UmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZChXVEZNb3ZlKGNoaWxkTGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
YWRkQ2hpbGRBdEluZGV4KFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIsIGludCBpbmRl
eCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoV1RGTW92ZShjaGlsZExh
eWVyKSwgaW5kZXgpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpDaGlsZHJlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEJlbG93KFJl
ZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7
CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBz
aWJsaW5nKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hp
bGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZShSZWY8R3Jh
cGhpY3NMYXllcj4mJiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUoV1RGTW92ZShjaGlsZExheWVyKSwgc2libGlu
Zyk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVu
KTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVy
KiBvbGRDaGlsZCwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpCit7CisgICAgaWYgKEdy
YXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgV1RGTW92ZShuZXdDaGlsZCkpKSB7
CisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJl
bik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAobV9w
YXJlbnQpCisgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KG1fcGFyZW50KS0+
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICBH
cmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
cldDOjpzZXRNYXNrTGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7CisgICAg
aWYgKGxheWVyID09IG1fbWFza0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIoV1RGTW92ZShsYXllcikpOworICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6c2V0UmVwbGljYXRlZExheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IGlmIChsYXllciA9PSBtX3JlcGxpY2F0ZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZExheWVyKGxheWVyKTsKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0ZWRCeUxheWVyKFJlZlB0cjxHcmFwaGljc0xheWVy
PiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX3JlcGxpY2FMYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoV1RGTW92
ZShsYXllcikpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpS
ZXBsaWNhTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHBvaW50ID09IG1fcG9zaXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHBvaW50KTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQgPT0gbV9hbmNob3JQb2ludCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocG9pbnQpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5
ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJvdW5k
c09yaWdpbihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4pCit7CisgICAgaWYgKG9yaWdpbiA9PSBt
X2JvdW5kc09yaWdpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Qm91bmRzT3JpZ2luKG9yaWdpbik7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5
ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBpZiAodCA9PSB0cmFu
c2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNm
b3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpUcmFu
c2Zvcm0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gY2hpbGRyZW5U
cmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJD
aGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNE
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2
YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlByZXNl
cnZlczNEKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE1hc2tzVG9Cb3VuZHMoYm9v
bCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza3NUb0JvdW5kcygpKQorICAgICAgICBy
ZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyh2YWx1ZSk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNv
bnRlbnRzUmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNSZWN0KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6Q29udGVudHNSZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldERyYXdz
Q29udGVudChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1
ZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c1Zpc2libGUoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVu
dHNBcmVWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c1Zpc2libGUodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGJh
Y2tmYWNlVmlzaWJpbGl0eSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBpZiAoY29sb3IgPT0gbV9zb2xpZENvbG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3NvbGlkQ29sb3IgPSBjb2xvcjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6U29saWRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaG93
RGVidWdCb3JkZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigp
ID09IHNob3cpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dE
ZWJ1Z0JvcmRlcihzaG93KTsKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKKyAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwg
ZmxvYXQgd2lkdGgpCit7CisgICAgbV9kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7CisgICAgbV9k
ZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpz
ZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdSZXBh
aW50Q291bnRlcigpID09IHNob3cpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5
ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihzaG93KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KTsKK30KKworc3RhdGljIGJvb2wgZmls
dGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorewor
ICAgIGlmICghZmlsdGVycy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgZmlsdGVyT3BlcmF0aW9uIDogZmlsdGVycy5vcGVyYXRpb25zKCkpIHsK
KyAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RmlsdGVycyhjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9
IGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXI6
OmZpbHRlcnMoKSA9PSBmaWx0ZXJzKQorICAgICAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVy
czsKKworICAgIGlmIChjYW5Db21wb3NpdGVGaWx0ZXJzKSB7CisgICAgICAgIGlmICghR3JhcGhp
Y3NMYXllcjo6c2V0RmlsdGVycyhmaWx0ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKEdyYXBoaWNzTGF5ZXI6OmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAg
IGNsZWFyRmlsdGVycygpOworCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJD
aGFuZ2U6OkZpbHRlcnMpOworICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCit7CisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAgICBpZiAobV9iYWNrZHJvcEZpbHRlcnMgPT0g
ZmlsdGVycykKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CisKKyAgICBpZiAo
Y2FuQ29tcG9zaXRlRmlsdGVycykKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2Ryb3BG
aWx0ZXJzKGZpbHRlcnMpOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJCYWNrZHJvcEZpbHRlcnMo
KTsKKworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJv
cEZpbHRlcnMpOworCisgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGJhY2tkcm9wRmlsdGVyc1JlY3QpCit7CisgICAgaWYgKG1fYmFja2Ryb3BGaWx0ZXJz
UmVjdCA9PSBiYWNrZHJvcEZpbHRlcnNSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGJhY2tkcm9wRmlsdGVyc1JlY3QpOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRl
cnMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6bm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFncywgU2NoZWR1bGVGbHVzaE9yTm90IHNjaGVk
dWxlRmx1c2gpCit7CisgICAgaWYgKGJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGJvb2wgaGFkVW5jb21taXR0ZWRDaGFuZ2VzID0gISFtX3VuY29tbWl0dGVkQ2hhbmdl
czsKKworICAgIG1fdW5jb21taXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7CisKKyAgICBpZiAoc2No
ZWR1bGVGbHVzaCA9PSBTY2hlZHVsZUZsdXNoKSB7CisgICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9
ICFoYWRVbmNvbW1pdHRlZENoYW5nZXM7CisgICAgICAgIGlmIChuZWVkc0ZsdXNoKQorICAgICAg
ICAgICAgY2xpZW50KCkubm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyAgICB9Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIG1h
c2stPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChh
dXRvKiByZXBsaWNhID0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2EtPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bigpKQorICAgICAgICBjaGlsZC0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpCit7CisgICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV0NMYXllclVwYXRlSW5mbyB1cGRhdGU7CisgICAgdXBkYXRlLmlkID0gcHJpbWFyeUxh
eWVySUQoKTsKKyAgICB1cGRhdGUuY2hhbmdlcyA9IHN0ZDo6ZXhjaGFuZ2UobV91bmNvbW1pdHRl
ZENoYW5nZXMsIHsgfSk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW4pIHsKKyAgICAgICAgdXBkYXRlLmNoaWxkcmVuID0gV1RGOjptYXAoY2hpbGRyZW4o
KSwgW10oYXV0byYgbGF5ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBsYXllci0+cHJpbWFyeUxh
eWVySUQoKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICBpZiAobWFza0xheWVyKCkpCisgICAg
ICAgICAgICB1cGRhdGUubWFza0xheWVyID0gbWFza0xheWVyKCktPnByaW1hcnlMYXllcklEKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwZGF0ZS5tYXNrTGF5ZXIgPSBzdGQ6Om51bGxv
cHQ7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxp
Y2FMYXllcikgeworICAgICAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgICAgICB1cGRh
dGUucmVwbGljYUxheWVyID0gcmVwbGljYUxheWVyKCktPnByaW1hcnlMYXllcklEKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHVwZGF0ZS5yZXBsaWNhTGF5ZXIgPSBzdGQ6Om51bGxvcHQ7
CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5
KSB7CisgICAgICAgIHVwZGF0ZS5wb3NpdGlvbiA9IHBvc2l0aW9uKCk7CisgICAgICAgIHVwZGF0
ZS5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CisgICAgICAgIHVwZGF0ZS5zaXplID0gc2l6
ZSgpOworICAgICAgICB1cGRhdGUuYm91bmRzT3JpZ2luID0gYm91bmRzT3JpZ2luKCk7CisgICAg
fQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKQor
ICAgICAgICB1cGRhdGUucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIGlmICh1cGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgdXBkYXRl
LmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSkKKyAgICAgICAgdXBkYXRlLmNvbnRlbnRz
VmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAgdXBkYXRlLmJhY2tm
YWNlVmlzaWJpbGl0eSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIGlmICh1cGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCisgICAgICAgIHVwZGF0ZS5tYXNr
c1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICBpZiAoZHJhd3NDb250ZW50KCkg
JiYgY29udGVudHNBcmVWaXNpYmxlKCkgJiYgIXNpemUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gaW1hZ2UgPSBtX2Nvb3JkaW5hdG9yLmNyZWF0ZUltYWdlQnVmZmVyRm9yTGF5ZXIo
c2l6ZSgpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IHsgeyB9LCBzaXplKCkg
fTsKKyAgICAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGltYWdlLT5jb250ZXh0
KCksIGNsaXBSZWN0KTsKKyAgICAgICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5
bmMoKTsKKyAgICAgICAgICAgIHVwZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RG
TW92ZShpbWFnZSkpOworCisgICAgICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAg
ICAgICAgICAgIHVwZGF0ZS5jaGFuZ2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQp
OworICAgICAgICB9CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlNvbGlkQ29sb3IpCisgICAgICAgIHVwZGF0ZS5zb2xpZENvbG9yID0gbV9zb2xpZENvbG9y
OworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykg
eworICAgICAgICB1cGRhdGUuc2hvd0RlYnVnQm9yZGVyID0gaXNTaG93aW5nRGVidWdCb3JkZXIo
KTsKKyAgICAgICAgdXBkYXRlLmRlYnVnQm9yZGVyQ29sb3IgPSBtX2RlYnVnQm9yZGVyQ29sb3I7
CisgICAgICAgIHVwZGF0ZS5kZWJ1Z0JvcmRlcldpZHRoID0gbV9kZWJ1Z0JvcmRlcldpZHRoOwor
ICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291
bnQpIHsKKyAgICAgICAgdXBkYXRlLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFp
bnRDb3VudGVyKCk7CisgICAgICAgIHVwZGF0ZS5yZXBhaW50Q291bnQgPSByZXBhaW50Q291bnQo
KTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0
eSkKKyAgICAgICAgdXBkYXRlLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUudHJhbnNm
b3JtID0gdHJhbnNmb3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6Q2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgIHVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9
IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6RmlsdGVycykKKyAgICAgICAgdXBkYXRlLmZpbHRlcnMgPSBmaWx0ZXJzKCk7CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7Cisg
ICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnMgPSBiYWNrZHJvcEZpbHRlcnMoKTsKKyAgICAg
ICAgdXBkYXRlLmJhY2tkcm9wRmlsdGVyc1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7Cisg
ICAgfQorCisgICAgbV9jb29yZGluYXRvci5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVw
ZGF0ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MzA4NjliYmI4NjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
aApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHcmFwaGljc0xheWVyV0MgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllciB7CitwdWJsaWM6CisgICAgc3RydWN0IENvb3JkaW5h
dG9yIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGdyYXBoaWNzTGF5ZXJSZW1vdmVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NM
YXllclVwYXRlSW5mbyYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlckZvckxheWVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkg
PSAwOworICAgIH07CisKKyAgICBHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5cGUsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmLCBDb29yZGluYXRvciYpOworICAgIH5HcmFwaGljc0xh
eWVyV0MoKSBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBwcmltYXJ5TGF5ZXJJRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4mJiwgaW50IGluZGV4KSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYsIEdy
YXBoaWNzTGF5ZXIqIHNpYmxpbmcpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhS
ZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykgb3ZlcnJpZGU7Cisg
ICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGlj
c0xheWVyPiYmIG5ld0NoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4m
Jik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZv
aWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYpOworICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNl
dFByZXNlcnZlczNEKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhi
b29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
Q29udGVudHNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNp
YmlsaXR5KGJvb2wpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xv
cihjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOworCisgICAgYm9vbCBzaG91bGREaXJl
Y3RseUNvbXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0RGVidWdCb3JkZXIoY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBmbG9hdCB3
aWR0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKSBvdmVycmlkZTsKKyAgICBib29sIHNldEJhY2tkcm9wRmlsdGVycyhjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCYWNrZHJvcEZpbHRl
cnNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xp
cFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGVudW0gU2NoZWR1bGVGbHVzaE9y
Tm90IDogYm9vbCB7IFNjaGVkdWxlRmx1c2gsIERvbnRTY2hlZHVsZUZsdXNoIH07CisgICAgdm9p
ZCBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+LCBTY2hl
ZHVsZUZsdXNoT3JOb3QgPSBTY2hlZHVsZUZsdXNoKTsKKworICAgIHN0YXRpYyBHcmFwaGljc0xh
eWVyOjpQbGF0Zm9ybUxheWVySUQgZ2VuZXJhdGVMYXllcklEKCk7CisKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbV9sYXllcklEIHsgZ2VuZXJhdGVMYXllcklE
KCkgfTsKKyAgICBDb29yZGluYXRvciYgbV9jb29yZGluYXRvcjsKKyAgICBPcHRpb25TZXQ8V0NM
YXllckNoYW5nZT4gbV91bmNvbW1pdHRlZENoYW5nZXM7CisgICAgV2ViQ29yZTo6Q29sb3IgbV9z
b2xpZENvbG9yOworICAgIFdlYkNvcmU6OkNvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKKyAgICBm
bG9hdCBtX2RlYnVnQm9yZGVyV2lkdGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tp
bmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWRlZGY2
ZjliZGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvV0NCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8b3B0
aW9uYWw+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0JhY2tpbmdTdG9yZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0NCYWNraW5nU3RvcmUo
KSB7IH0KKworICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIHsgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlQnVmZmVyKFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcj4mJiBpbWFnZSkgeyBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShp
bWFnZSk7IH0KKworICAgIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKCkgeyByZXR1cm4gbV9iaXRt
YXAuZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGJvb2wgaGFzSW1hZ2VC
dWZmZXIgPSBtX2ltYWdlQnVmZmVyOworICAgICAgICBlbmNvZGVyIDw8IGhhc0ltYWdlQnVmZmVy
OworCisgICAgICAgIGlmIChoYXNJbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgYXV0byBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5k
Jj4oKm1faW1hZ2VCdWZmZXItPmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpLmNyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBoYW5kbGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDQmFja2lu
Z1N0b3JlJiByZXN1bHQpCisgICAgeworICAgICAgICBib29sIGhhc0ltYWdlQnVmZmVyOworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0ltYWdlQnVmZmVyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaGFzSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAg
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBXVEY6OnN3aXRjaE9uKGhhbmRsZSwKKyAgICAgICAgICAgICAgICBbJl0gKFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cisg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L1dDTGF5ZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L1dDTGF5ZXJGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjQwYTgwZGMzMjRhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQ0xheWVyRmFjdG9y
eS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
ewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dDTGF5ZXJGYWN0b3J5OjpXQ0xheWVyRmFj
dG9yeShHcmFwaGljc0xheWVyV0M6OkNvb3JkaW5hdG9yJiBjb29yZGluYXRvcikKKyAgICA6IG1f
Y29vcmRpbmF0b3IoY29vcmRpbmF0b3IpCit7Cit9CisKK1JlZjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBXQ0xheWVyRmFjdG9yeTo6Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYgY2xp
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzTGF5ZXJXQyhsYXllclR5
cGUsIGNsaWVudCwgbV9jb29yZGluYXRvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJG
YWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFj
dG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTRiYWI1MTc0
OWZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvV0NMYXllckZhY3RvcnkuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV0NMYXllckZhY3RvcnkgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkgeworcHVibGljOgorICAgIFdDTGF5ZXJGYWN0b3J5KEdyYXBoaWNzTGF5ZXJXQzo6Q29v
cmRpbmF0b3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFj
dG9yeQorICAgIFJlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQmKSBvdmVycmlkZTsKKworICAgIEdyYXBoaWNzTGF5ZXJXQzo6Q29vcmRpbmF0b3ImIG1fY29v
cmRpbmF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjIzZjc4NzRmZjkyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMCww
ICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldD
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFdDTGF5ZXJDaGFuZ2UgOiB1aW50MzJfdCB7
CisgICAgQ2hpbGRyZW4gICAgICAgICAgICAgICAgPSAxIDw8ICAwLAorICAgIE1hc2tMYXllciAg
ICAgICAgICAgICAgID0gMSA8PCAgMSwKKyAgICBSZXBsaWNhTGF5ZXIgICAgICAgICAgICA9IDEg
PDwgIDIsCisgICAgR2VvbWV0cnkgICAgICAgICAgICAgICAgPSAxIDw8ICAzLAorICAgIFByZXNl
cnZlczNEICAgICAgICAgICAgID0gMSA8PCAgNCwKKyAgICBDb250ZW50c1Zpc2libGUgICAgICAg
ICA9IDEgPDwgIDUsCisgICAgQmFja2ZhY2VWaXNpYmlsaXR5ICAgICAgPSAxIDw8ICA2LAorICAg
IE1hc2tzVG9Cb3VuZHMgICAgICAgICAgID0gMSA8PCAgNywKKyAgICBTb2xpZENvbG9yICAgICAg
ICAgICAgICA9IDEgPDwgIDgsCisgICAgRGVidWdWaXN1YWxzICAgICAgICAgICAgPSAxIDw8ICA5
LAorICAgIFJlcGFpbnRDb3VudCAgICAgICAgICAgID0gMSA8PCAxMCwKKyAgICBDb250ZW50c1Jl
Y3QgICAgICAgICAgICA9IDEgPDwgMTEsCisgICAgT3BhY2l0eSAgICAgICAgICAgICAgICAgPSAx
IDw8IDEyLAorICAgIEJhY2tpbmdTdG9yZSAgICAgICAgICAgID0gMSA8PCAxMywKKyAgICBUcmFu
c2Zvcm0gICAgICAgICAgICAgICA9IDEgPDwgMTQsCisgICAgQ2hpbGRyZW5UcmFuc2Zvcm0gICAg
ICAgPSAxIDw8IDE1LAorICAgIEZpbHRlcnMgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKKyAg
ICBCYWNrZHJvcEZpbHRlcnMgICAgICAgICA9IDEgPDwgMTcsCisgICAgLy8gQW5pbWF0aW9uCit9
OworCitzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIGlkOworICAgIE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBjaGFu
Z2VzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+
IGNoaWxkcmVuOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEPiBtYXNrTGF5ZXI7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IHJlcGxpY2FMYXllcjsKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IHBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2lu
dDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IGJvdW5kc09yaWdpbjsKKyAgICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgYm9vbCBzaG93RGVi
dWdCb3JkZXI7CisgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXI7CisgICAgYm9vbCBjb250ZW50
c1Zpc2libGU7CisgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CisgICAgYm9vbCBwcmVzZXJ2
ZXMzRDsKKyAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOworICAgIFdlYkNvcmU6OkNvbG9y
IGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBmbG9hdCBkZWJ1Z0Jv
cmRlcldpZHRoOworICAgIGludCByZXBhaW50Q291bnQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnRlbnRzUmVjdDsKKyAgICBXQ0JhY2tpbmdTdG9yZSBiYWNraW5nU3RvcmU7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgIFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMgZmlsdGVyczsKKyAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9w
RmlsdGVyczsKKyAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1Jl
Y3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IGlkOworICAgICAg
ICBlbmNvZGVyIDw8IGNoYW5nZXM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6Q2hpbGRyZW4pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuOworICAgICAgICBp
ZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgbWFza0xheWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJl
cGxpY2FMYXllcikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcmVwbGljYUxheWVyOworICAgICAg
ICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KQorICAgICAgICAgICAgZW5j
b2RlciA8PCBwb3NpdGlvbiA8PCBhbmNob3JQb2ludCA8PCBzaXplIDw8IGJvdW5kc09yaWdpbjsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgcHJlc2VydmVzM0Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250
ZW50c1Zpc2libGU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Zh
Y2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZmFjZVZpc2liaWxpdHk7
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgbWFza3NUb0JvdW5kczsKKyAgICAgICAgaWYgKGNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgZW5jb2RlciA8PCBzb2xp
ZENvbG9yOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFs
cykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc2hvd0RlYnVnQm9yZGVyIDw8IGRlYnVnQm9yZGVy
Q29sb3IgPDwgZGVidWdCb3JkZXJXaWR0aDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpSZXBhaW50Q291bnQpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNob3dSZXBhaW50
Q291bnRlciA8PCByZXBhaW50Q291bnQ7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1JlY3Q7
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgb3BhY2l0eTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tpbmdTdG9yZTsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY2hpbGRy
ZW5UcmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVy
cykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmlsdGVyczsKKyAgICAgICAgaWYgKGNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpCisgICAgICAgICAgICBlbmNvZGVyIDw8
IGJhY2tkcm9wRmlsdGVycyA8PCBiYWNrZHJvcEZpbHRlcnNSZWN0OworICAgIH0KKworICAgIHRl
bXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NMYXllclVwYXRlSW5mbyYgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaWQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGFuZ2Vz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmNoaWxkcmVuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFz
a0xheWVyKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXNrTGF5
ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpIHsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcGxpY2FMYXllcikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5wb3NpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYW5jaG9yUG9pbnQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJvdW5kc09yaWdpbikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKSB7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5wcmVzZXJ2ZXMzRCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY29udGVudHNWaXNpYmxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2ZhY2VWaXNpYmlsaXR5KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5iYWNrZmFjZVZpc2liaWxpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpN
YXNrc1RvQm91bmRzKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5t
YXNrc1RvQm91bmRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xvcikg
eworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc29saWRDb2xvcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvd0RlYnVnQm9yZGVyKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5kZWJ1Z0JvcmRlckNvbG9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kZWJ1Z0JvcmRlcldpZHRoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3Vs
dC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KSB7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG93UmVwYWludENvdW50ZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnJlcGFpbnRDb3VudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRz
UmVjdCkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNS
ZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkgeworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQub3BhY2l0eSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuYmFja2luZ1N0b3JlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
VHJhbnNmb3JtKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50cmFu
c2Zvcm0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkg
eworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hpbGRyZW5UcmFuc2Zv
cm0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzKSB7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5maWx0ZXJzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5iYWNrZHJvcEZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tkcm9wRmls
dGVyc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgV0NVcGF0ZUluZm8geworICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCByb290TGF5ZXI7CisgICAg
VmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gYWRkZWRMYXll
cnM7CisgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4g
cmVtb3ZlZExheWVyczsKKyAgICBWZWN0b3I8V0NMYXllclVwYXRlSW5mbz4gY2hhbmdlZExheWVy
czsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcm9vdExheWVyOwor
ICAgICAgICBlbmNvZGVyIDw8IGFkZGVkTGF5ZXJzOworICAgICAgICBlbmNvZGVyIDw8IHJlbW92
ZWRMYXllcnM7CisgICAgICAgIGVuY29kZXIgPDwgY2hhbmdlZExheWVyczsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDVXBhdGVJbmZvJiByZXN1bHQpCisgICAg
eworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yb290TGF5ZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5h
ZGRlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnJlbW92ZWRMYXllcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGFuZ2VkTGF5ZXJzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYktpdDo6V0NMYXllckNoYW5nZT4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZSwKKyAg
ICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbiwKKyAgICAgICAgV2ViS2l0OjpX
Q0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6
UmVwbGljYUxheWVyLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5LAor
ICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNELAorICAgICAgICBXZWJL
aXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSwKKyAgICAgICAgV2ViS2l0OjpXQ0xh
eWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHksCisgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6TWFza3NUb0JvdW5kcywKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpTb2xp
ZENvbG9yLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscywKKyAg
ICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQsCisgICAgICAgIFdlYktp
dDo6V0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJD
aGFuZ2U6Ok9wYWNpdHksCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2luZ1N0
b3JlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSwKKyAgICAgICAg
V2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSwKKyAgICAgICAgV2ViS2l0
OjpXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6
OkJhY2tkcm9wRmlsdGVycworICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCmluZGV4IDUxMjM5MmU2NDI0ZS4uZGQ0YjU5NDU1N2Nl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKQEAgLTU3LDYgKzU3LDcgQEAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSIE9OKQogU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX01FRElBX0ZPVU5EQVRJT04gT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
SU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUn0pCitTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfV0MgT04pCiAKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KEVOQUJMRV9ERVZFTE9QRVJfTU9ERSAke0RFVkVMT1BFUl9NT0RFfSkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434501</attachid>
            <date>2021-07-28 23:43:29 -0700</date>
            <delta_ts>2021-10-07 23:42:15 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2021-07-29.diff</filename>
            <type>text/plain</type>
            <size>94087</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggZWZiYjM2ZmI1MWYwLi4yNWUzMzYwNGQ5MmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxX
aXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFC
bGVuZCkKIHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
MDsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNFKENBSVJPKQogICAgIGhkYyA9IGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggOWYwM2E4YTIwNWFhLi44YjhiY2Y1NjIz
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3Bw
CkBAIC0yODUyLDE1ICsyODUyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJyZW50RnJhbWUoV2ViCiAgICAgICAg
IEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCk7CiAKICAgICAgICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChjYWlyb0Zvcm1h
dCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAgICAgIGltYWdlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRh
dGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOwotCi0gICAgICAgIEZsb2F0
UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoaW1hZ2UpIHsK
LSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAg
ICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgICAgICAgICAgQ2Fpcm86
OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5W
QUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEp
LCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpKTsKKyAgICAgICAgICAgIGF1dG8g
aW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOworICAgICAgICAg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBj
b250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1JlY3Quc2l6ZSgpLCBkZXN0UmVjdCwg
c3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGlt
cGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBkNjM5M2QyMmM5
YmUuLmIyZDM3YzI4ZTFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCkBAIC0yODAsMTEgKzI4MCwxMyBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAgIGlm
ICghbV9wYWdlKQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwog
CisjaWYgIVVTRShXQykgLy8gVGhpcyBjb2RlIHBhdGggY2F1c2VzIGluY29ycmVjdCBTVkcgcmVu
ZGVyaW5nCiAgICAgaWYgKCFjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKSB7CiAgICAgICAg
IC8vIERpc3BsYXkgbGlzdCBkcmF3aW5nIGNhbid0IGhhbmRsZSBhcmJpdHJhcnkgRE9NIGNvbnRl
bnQuCiAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjc3NDg6IFJlbW92ZSB0aGlzIHdoZW4gaXQgY2FuLgogICAgICAgICByZXR1cm4gZHJh
d0FzTmF0aXZlSW1hZ2UoY29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiAgICAg
fQorI2VuZGlmCiAKICAgICBhdXRvIHZpZXcgPSBtYWtlUmVmUHRyKGZyYW1lVmlldygpKTsKICAg
ICBBU1NFUlQodmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggN2VkZDE0ODc5OWE5Li5mOTcwNGMxN2Jk
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luLmg+CiAjZW5kaWYKIAorI2lmIFVTRShXQykKKyNpbmNsdWRlICJSZW1v
dGVXQ0xheWVyVHJlZUhvc3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMTYsNiArMzIwLDE2IEBAIHZvaWQgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiBj
aGFubmVsTmFtCiAjZW5kaWYKIH0KIAorI2lmIFVTRShXQykKK3ZvaWQgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0
SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCit7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5lbnN1cmUoaWRlbnRpZmll
ciwgWyZdKCkgeworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVXQ0xheWVyVHJlZUhv
c3Q+KCp0aGlzLCBXVEZNb3ZlKGlkZW50aWZpZXIpLCBuYXRpdmVXaW5kb3cpOworICAgIH0pOwor
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9Cisj
ZW5kaWYKKwogYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJN
ZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIDogbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApp
bmRleCBiODgyYWEwOTA3MzcuLjkwMzE2N2UxZWQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC01Myw2ICs1Mywx
MCBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CiAj
ZW5kaWYKIAorI2lmIFVTRShXQykKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwpAQCAtODEsNiArODUsNyBAQCBjbGFzcyBSZW1v
dGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eTsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ7CiBjbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDsKIGNsYXNzIFJlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXI7CitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q7CiBj
bGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Owogc3RydWN0IEdQVVByb2Nlc3NDb25u
ZWN0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBNZWRpYU92ZXJyaWRlc0ZvclRlc3Rpbmc7CkBAIC0y
MTcsNiArMjIyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBjb25maWd1cmVMb2dnaW5nQ2hh
bm5lbChjb25zdCBTdHJpbmcmLCBXVEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsKTsKIAor
I2lmIFVTRShXQykKKyAgICB2b2lkIGNyZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5
ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisjZW5kaWYKKwog
ICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNv
bm5lY3Rpb24mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKQEAgLTI5Niw2ICszMDUsMTEg
QEAgcHJpdmF0ZToKICAgICB1c2luZyBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXAgPSBI
YXNoTWFwPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJQcm94eT4+OwogICAgIFJlbW90ZUF1ZGlv
SGFyZHdhcmVMaXN0ZW5lck1hcCBtX3JlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcDsKIAor
I2lmIFVTRShXQykKKyAgICB1c2luZyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgPSBIYXNoTWFw
PFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVy
VHJlZUhvc3Q+PjsKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgbV9yZW1vdGVXQ0xheWVy
VHJlZUhvc3RNYXA7CisjZW5kaWYKKwogICAgIFJlZlB0cjxSZW1vdGVSZW1vdGVDb21tYW5kTGlz
dGVuZXJQcm94eT4gbV9yZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXI7CiAgICAgYm9vbCBtX2lz
QWN0aXZlTm93UGxheWluZ1Byb2Nlc3MgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCmluZGV4IGZlNDhjYTIwYmEwOC4uZWYzMzhiMDFlMjViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgpAQCAtNTEsNiArNTEsOSBAQCBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKICAgICBSZWxlYXNlUmVtb3RlQ29t
bWFuZExpc3RlbmVyKFdlYktpdDo6UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVySWRlbnRpZmll
ciBpZGVudGlmaWVyKQogICAgIFNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoVmVjdG9yPFN0cmlu
Zz4gbGFuZ3VhZ2VzKQogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVs
TmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90
IFdURkxvZ0xldmVsIGxldmVsKQorI2lmIFVTRShXQykKKyAgICBDcmVhdGVXQ0xheWVyVHJlZUhv
c3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90
IG5hdGl2ZVdpbmRvdykKKyNlbmRpZgogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90
ZVdDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjE2MmZhZjY5N2JkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0w
LDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCIKKworI2lmIFVTRShXQykKKworI2luY2x1ZGUg
IkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJHTC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RydWN0IFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dDo6TGF5ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKExheWVyKTsKK3B1YmxpYzoKKyAgICBMYXllcigpID0gZGVmYXVsdDsKKworICAg
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciB0ZXhtYXBMYXllcjsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gYmFja2Ryb3BMYXllcjsKK307CisK
K1JlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYktpdDo6V0NMYXllclRy
ZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAg
OiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoY29ubmVjdGlvblRvV2ViUHJv
Y2VzcykpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKK3sKKyAgICBtX2Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2Yg
dGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIG1f
Y29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVycHJldF9j
YXN0PEhXTkQ+KG5hdGl2ZVdpbmRvdykpOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
K30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KCkKK3sK
KyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBSZW1v
dGVXQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoYXV0byBpZCA6IHVwZGF0ZS5hZGRlZExheWVycykgeworICAgICAgICBhdXRvIGxh
eWVyID0gbWFrZVVuaXF1ZTxMYXllcj4oKTsKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBXVEZN
b3ZlKGxheWVyKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0
ZS5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5
ZXJVcGRhdGUuaWQpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hp
bGRyZW4oV1RGOjptYXAobGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXhtYXBMYXllcjsKKyAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBtYXNrTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLm1h
c2tMYXllcikKKyAgICAgICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXll
clVwZGF0ZS5tYXNrTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRNYXNrTGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAg
ICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIgPSBudWxscHRyOworICAg
ICAgICAgICAgaWYgKGxheWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAgICAgICBy
ZXBsaWNhTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5yZXBsaWNhTGF5ZXIpLT50
ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBsaWNhTGF5
ZXIocmVwbGljYUxheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24pOworICAgICAgICAgICAg
bGF5ZXItPnRleG1hcExheWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRlLmFuY2hvclBvaW50
KTsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXplKGxheWVyVXBkYXRlLnNp
emUpOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJvdW5kc09yaWdpbihsYXll
clVwZGF0ZS5ib3VuZHNPcmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChsYXllclVwZGF0
ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAgICAgICBsYXll
ci0+dGV4bWFwTGF5ZXIuc2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUucHJlc2VydmVzM0QpOwor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRz
UmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c1JlY3QobGF5
ZXJVcGRhdGUuY29udGVudHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxheWVyVXBkYXRlLmNvbnRlbnRzVmlzaWJsZSk7
CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Zh
Y2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tmYWNl
VmlzaWJpbGl0eShsYXllclVwZGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICBpZiAo
bGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCisgICAg
ICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0TWFza3NUb0JvdW5kcyhsYXllclVwZGF0ZS5t
YXNrc1RvQm91bmRzKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGF1dG8gYml0bWFwID0gbGF5ZXJV
cGRhdGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOworICAgICAgICAgICAgaWYgKGJpdG1hcCkgewor
ICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRt
YXAtPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZS0+
dXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIGJpdG1hcC0+c2l6
ZSgpLCB7IHsgfSwgYml0bWFwLT5zaXplKCkgfSk7CisgICAgICAgICAgICAgICAgbGF5ZXItPnRl
eG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShsYXllci0+YmFja2luZ1N0b3JlLmdldCgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dEJhY2tpbmdTdG9yZShudWxscHRyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0
b3JlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisgICAgICAgICAg
ICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0U29saWRDb2xvcihsYXllclVwZGF0ZS5zb2xpZENvbG9y
KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1
Z1Zpc3VhbHMpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0RGVidWdWaXN1YWxz
KGxheWVyVXBkYXRlLnNob3dEZWJ1Z0JvcmRlciwgbGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJDb2xv
ciwgbGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJXaWR0aCk7CisgICAgICAgIGlmIChsYXllclVwZGF0
ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KQorICAgICAgICAgICAgbGF5
ZXItPnRleG1hcExheWVyLnNldFJlcGFpbnRDb3VudGVyKGxheWVyVXBkYXRlLnNob3dSZXBhaW50
Q291bnRlciwgbGF5ZXJVcGRhdGUucmVwYWludENvdW50KTsKKyAgICAgICAgaWYgKGxheWVyVXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQorICAgICAgICAgICAgbGF5ZXIt
PnRleG1hcExheWVyLnNldE9wYWNpdHkobGF5ZXJVcGRhdGUub3BhY2l0eSk7CisgICAgICAgIGlm
IChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAg
ICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFRyYW5zZm9ybShsYXllclVwZGF0ZS50cmFuc2Zv
cm0pOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNo
aWxkcmVuVHJhbnNmb3JtKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENoaWxk
cmVuVHJhbnNmb3JtKGxheWVyVXBkYXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgaWYg
KGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzKQorICAgICAgICAg
ICAgbGF5ZXItPnRleG1hcExheWVyLnNldEZpbHRlcnMobGF5ZXJVcGRhdGUuZmlsdGVycyk7Cisg
ICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BG
aWx0ZXJzKSB7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci5yZXNldCgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllci0+YmFja2Ryb3BM
YXllcikgeworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllciA9IG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlckxheWVyPigpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+
YmFja2Ryb3BMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICAg
ICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0Q29udGVudHNWaXNpYmxlKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tkcm9wTGF5ZXItPnNldEZpbHRlcnMobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzKTsKKyAg
ICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0U2l6ZShsYXllclVwZGF0ZS5i
YWNrZHJvcEZpbHRlcnNSZWN0LnJlY3QoKS5zaXplKCkpOworICAgICAgICAgICAgICAgIGxheWVy
LT5iYWNrZHJvcExheWVyLT5zZXRQb3NpdGlvbihsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNS
ZWN0LnJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRCYWNrZHJvcExheWVyKGxheWVyLT5iYWNrZHJvcExheWVyLmdldCgp
KTsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZHJvcEZpbHRlcnNSZWN0
KGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVyc1JlY3QpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChhdXRvIGlkIDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5ZXJz
LnJlbW92ZShpZCk7CisKKyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBkYXRl
LnJvb3RMYXllciktPnRleG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRpb25z
UmVjdXJzaXZlbHkoTW9ub3RvbmljVGltZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5kb3dT
aXplID0gZXhwYW5kZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdwb3J0
KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisgICAgZ2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5Q
YWludGluZygpOworICAgIHJvb3RMYXllci0+cGFpbnQoKm1fdGV4dHVyZU1hcHBlcik7CisgICAg
Ly8gbV9mcHNDb3VudGVyLnVwZGF0ZUZQU0FuZERpc3BsYXkoKm1fdGV4dHVyZU1hcHBlcik7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgbV9jb250ZXh0LT5zd2Fw
QnVmZmVycygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShX
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjEyYmFjMGRkNzQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFdDKQorCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4
dHVyZU1hcHBlcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1cmVNYXBw
ZXJUaWxlZEJhY2tpbmdTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CitzdHJ1Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNzIFJl
bW90ZVdDTGF5ZXJUcmVlSG9zdCA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW90
ZVdDTGF5ZXJUcmVlSG9zdCk7CisKK3B1YmxpYzoKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3Qo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRp
ZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0
KCk7CisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJik7CisKK3ByaXZhdGU6CisgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgV0NMYXll
clRyZWVIb3N0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisKKyAgICBzdHJ1Y3QgTGF5ZXI7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXI+PiBMYXll
ck1hcDsKKyAgICBMYXllck1hcCBtX2xheWVyczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxOTc4
MTFiZDM5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFVTRShX
QykKKworbWVzc2FnZXMgLT4gUmVtb3RlV0NMYXllclRyZWVIb3N0IE5vdFJlZkNvdW50ZWQgewor
ICAgIFVwZGF0ZShzdHJ1Y3QgV2ViS2l0OjpXQ1VwYXRlSW5mbyB1cGRhdGVJbmZvKQorfQorCisj
ZW5kaWYgLy8gVVNFKFdDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dp
bi9HUFVQcm9jZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQ
VVByb2Nlc3NNYWluV2luLmNwcAppbmRleCBmMDFlNjM5ZDlkNzguLjI3MjM0Y2JmYjVkNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5j
cHAKQEAgLTMwLDE0ICszMCwzMSBAQAogCiAjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4u
aCIKICNpbmNsdWRlICJHUFVQcm9jZXNzLmgiCisjaW5jbHVkZSA8T2JqYmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi93aW4vU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX0xJQlJBUlkodXNlcjMyKTsK
K1NPRlRfTElOS19PUFRJT05BTCh1c2VyMzIsIFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0
LCBCT09MLCBTVERBUElDQUxMVFlQRSwgKERQSV9BV0FSRU5FU1NfQ09OVEVYVCkpOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BVUHJvY2Vzc01haW5XaW4gZmluYWw6IHB1YmxpYyBB
dXhpbGlhcnlQcm9jZXNzTWFpbkJhc2VOb1NpbmdsZXRvbjxHUFVQcm9jZXNzPiB7CitwdWJsaWM6
CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0UHRyKCkpCisgICAgICAgICAgICBTZXRQ
cm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKERQSV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJf
TU9OSVRPUl9BV0FSRV9WMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNldFByb2Nlc3NE
UElBd2FyZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9OwogCiBpbnQgR1BVUHJv
Y2Vzc01haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogeworICAgIC8vIGZvciBEaXJlY3RYCisg
ICAgSFJFU1VMVCBociA9IDo6Q29Jbml0aWFsaXplRXgobnVsbHB0ciwgQ09JTklUX01VTFRJVEhS
RUFERUQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgIHJldHVybiBB
dXhpbGlhcnlQcm9jZXNzTWFpbjxHUFVQcm9jZXNzTWFpbldpbj4oYXJnYywgYXJndik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDAxNTY1ZDU1MDY5Ny4uZDU3MWI1NDUzOTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExLDYgKzExLDggQEAgYWRkX2RlZmluaXRpb25z
KC1EQlVJTERJTkdfV0VCS0lUKQogbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAogCisgICAgR1BV
UHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCisKICAgICBHUFVQ
cm9jZXNzL21lZGlhL3dpbi9SZW1vdGVNZWRpYVBsYXllclByb3h5V2luLmNwcAogCiAgICAgR1BV
UHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwCkBAIC02OSw2ICs3MSw4IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvd2luL1dl
YnNpdGVEYXRhU3RvcmVXaW4uY3BwCiAKKyAgICBVSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94
eVdDLmNwcAorCiAgICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVBy
b2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9X
ZWJQYWdlUHJveHlXaW4uY3BwCkBAIC03Niw2ICs4MCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKICAgICBVSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCiAKKyAgICBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9S
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKwogICAgIFdlYlByb2Nlc3MvR1BVL21lZGlh
L3dpbi9WaWRlb0xheWVyUmVtb3RlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCkBAIC05NSw2ICsxMDEsMTAgQEAgbGlzdChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIu
Y3BwCiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKKyAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKKwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93
aW4vV2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2lu
LmNwcApAQCAtMTAyLDYgKzExMiw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAK
IGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCS0lUX0RJ
Un0vR1BVUHJvY2Vzcy9ncmFwaGljcy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9j
bGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7
V0VCS0lUX0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCkBAIC0xMTksMTYgKzEzMCwyMyBAQCBsaXN0
KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIK
KyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQ
cm9jZXNzL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93
YyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4i
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RP
TSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7
V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4iCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vd2luIgogKQogCitsaXN0KEFQ
UEVORCBXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1JlbW90ZVdDTGF5ZXJUcmVlSG9zdAorKQorCiBzZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURpcmVj
dG9yaWVzICR7V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVN9KQogc2V0KFdlYktpdENvbW1vblN5
c3RlbUluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklF
U30pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDQ2MDk5
OWVmZjlhZi4uZjE1NDNiMmVkMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKQEAgLTM0NCw2ICszNDQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9y
d2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpUcmFja1ByaXZhdGVSZW1vdGVJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJL
aXQ6OlVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpX
Q0xheWVyVHJlZUhvc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlhSRGV2aWNlSWRlbnRpZmllcicsCiAgICAg
XSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKaW5kZXggZTE1MGMzMTE1NGIz
Li41ZTZhYjkzOTA0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdB
cmVhSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCkBA
IC0zNyw3ICszNyw4IEBAIGVudW0gRHJhd2luZ0FyZWFUeXBlIHsKICNlbmRpZgogICAgIERyYXdp
bmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSwKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVk
R3JhcGhpY3MKKyAgICBEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZEdyYXBoaWNzLAorICAgIERy
YXdpbmdBcmVhVHlwZVdDUmVtb3RlCiAjZW5kaWYKIH07CiAgICAgCkBAIC02Myw2ICs2NCw3IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU+IHsK
ICAgICAgICAgLCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6RHJhd2luZ0FyZWFUeXBlUmVtb3Rl
TGF5ZXJUcmVlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJF
X01BUFBFUikKICAgICAgICAgLCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6RHJhd2luZ0FyZWFU
eXBlQ29vcmRpbmF0ZWRHcmFwaGljcworICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBl
OjpEcmF3aW5nQXJlYVR5cGVXQ1JlbW90ZQogI2VuZGlmCiAgICAgPjsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJjMDU5OTViMmQzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eVdDLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0RyYXdpbmdBcmVhUHJveHlX
Qzo6RHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5LCBXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZVdDUmVtb3RlLCB3ZWJQYWdlUHJveHksIHByb2Nlc3MpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0Fy
ZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5n
QXJlYTo6VXBkYXRlR2VvbWV0cnkobV9zaXplKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94
eVdDLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdhNmVlYjBmODI0MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJv
eHlXQy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBEcmF3aW5nQXJlYVByb3h5V0MgZmluYWwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7
CitwdWJsaWM6CisgICAgRHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYsIFdlYlByb2Nl
c3NQcm94eSYpOworCitwcml2YXRlOgorICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggZWVjYTg0YjQ3YTY0Li43OWFhMDc3NmJkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAKICNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdB
cmVhUHJveHlXQy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlXaW4uaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eVdpbi5oIgpA
QCAtNDcsNiArNDgsOCBAQCBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV2ViVmlldyYg
dmlldykKIC8vIFBhZ2VDbGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCiBzdGQ6OnVuaXF1
ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVh
UHJveHkoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogeworICAgIGlmICgxKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVByb3h5V0M+KCptX3ZpZXcucGFnZSgpLCBwcm9j
ZXNzKTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRH
cmFwaGljcz4oKm1fdmlldy5wYWdlKCksIHByb2Nlc3MpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMDljZTRjNmVmNmQ2Li4xZjVlN2FhMmZjYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTMxMiw4ICsz
MTIsOSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFdha2V1cE1lc3Nh
Z2UoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpCiB7CiAgICAgYXV0
byBhcmd1bWVudHMgPSBzdGQ6OmV4Y2hhbmdlKG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1l
bnRzLCBzdGQ6Om51bGxvcHQpOwotICAgIGlmICghYXJndW1lbnRzKQorICAgIGlmICghYXJndW1l
bnRzKSB7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBzZW5kV2FrZXVwTWVzc2FnZSgq
YXJndW1lbnRzKTsKICAgICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2Fr
ZXVwID0gMDsKQEAgLTMzNyw2ICszMzgsNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQXBwZW5kRGF0YShjb25zdCBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbgogICAg
ICAgICAgICAgICAgIHNlbmRXYWtldXBNZXNzYWdlKCpzdGQ6OmV4Y2hhbmdlKG1fZGVmZXJyZWRX
YWtldXBNZXNzYWdlQXJndW1lbnRzLCBzdGQ6Om51bGxvcHQpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQorICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQXBwZW5kRGF0YTogIiA8PCBi
b29sKG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTM0NSw2ICszNDcsNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQXBwZW5kRGF0YShjb25zdCBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbgogICAg
IGF1dG8gb2Zmc2V0VG9SZWFkID0gc2hhcmVkSGFuZGxlLT53cml0YWJsZU9mZnNldCgpIC0gbnVt
YmVyT2ZCeXRlczsKICAgICBpZiAoc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG9mZnNldFRv
UmVhZCwgZGVzdGluYXRpb25JbWFnZUJ1ZmZlci50b1VJbnQ2NCgpIH0pKSB7CiAgICAgICAgIG1f
cGFyYW1ldGVycy5yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmRpZEFwcGVuZERhdGE6IHRyeSByZXN1bWUiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIzYzkzMjZlYWMy
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5
ZXJUcmVlSG9zdFByb3h5LmgiCisKKyNpZiBVU0UoV0MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZW1vdGVXQ0xh
eWVyVHJlZUhvc3RQcm94eTo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkoV2ViUGFnZSYgcGFn
ZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICZjb25zdF9jYXN0PFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Jj4oKnRoaXMp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCitHUFVQcm9j
ZXNzQ29ubmVjdGlvbiYgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pIHsKKyAg
ICAgICAgYXV0byYgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVj
dGlvbi5hZGRDbGllbnQoKnRoaXMpOworICAgICAgICAvLyBncHVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCkudG9VSW50NjQoKSwgKnRoaXMpOworICAgICAgICBncHVQcm9jZXNzQ29u
bmVjdGlvbi5jb25uZWN0aW9uKCkuc2VuZCgKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVXQ0xheWVyVHJlZUhvc3Qod2NMYXllclRyZWVIb3N0
SWRlbnRpZmllcigpLCBtX3BhZ2UubmF0aXZlV2luZG93SGFuZGxlKCkpLAorICAgICAgICAgICAg
MCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5j
UmVwbHkpOworICAgICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uID0gbWFrZVdlYWtQdHIoZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24pOworICAgIH0KKyAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb247Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmdwdVByb2Nlc3ND
b25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIHByZXZpb3VzQ29ubmVjdGlv
bikKK3sKKyAgICBwcmV2aW91c0Nvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBt
X2dwdVByb2Nlc3NDb25uZWN0aW9uID0gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlV0NM
YXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCk7Cit9CisK
K3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVw
ZGF0ZUluZm8pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjpV
cGRhdGUodXBkYXRlSW5mbykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShXQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYwZGFiYzNjMDg0MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFdDKQorCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNz
YWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAg
ICAsIHByaXZhdGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHkpOworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dFByb3h5KFdlYlBhZ2UmKTsKKworICAgIHZvaWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYpOworCitw
cml2YXRlOgorICAgIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgd2NMYXllclRyZWVIb3N0SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcjsgfTsK
KyAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbiYgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsK
KworICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nl
c3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKKworICAg
IC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdlYWtQdHI8R1BVUHJvY2Vz
c0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CisgICAgV0NMYXllclRyZWVIb3N0
SWRlbnRpZmllciBtX3djTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgeyBXQ0xheWVyVHJlZUhvc3RJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAgV2ViUGFnZSYgbV9wYWdlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoV0MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXll
clRyZWVIb3N0SWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNjc4YjdiZmRiN2JlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFdDKQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gV0NMYXllclRyZWVIb3N0SWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgV0NMYXllclRy
ZWVIb3N0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8V0NMYXllclRyZWVIb3N0SWRlbnRp
ZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShXQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcApp
bmRleCBjZGJhNWFlNjU4ZGUuLjBhMGU2YjE1YWIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgiCiAjZWxpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJEcmF3aW5n
QXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Nyw2ICs1OCw4IEBAIHN0ZDo6dW5pcXVl
X3B0cjxEcmF3aW5nQXJlYT4gRHJhd2luZ0FyZWE6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlLCBj
b25zdCBXZWJQYWdlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhU
VVJFX01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVkR3JhcGhpY3M6
CiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cz4od2ViUGFnZSwgcGFyYW1ldGVycyk7CisgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVXQ1JlbW90
ZToKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFXQz4od2ViUGFnZSwgcGFy
YW1ldGVycyk7CiAjZW5kaWYKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDc0NzcxZWM0MGNjYi4uMjE1NTYwOTEzYWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAg
LTEzNiw2ICsxMzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRy
eShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgYm9vbCBmbHVzaFN5bmNocm9ub3Vz
bHksIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgZmVuY2VQb3J0KSB7IH0KICNlbmRpZgogCisj
aWYgVVNFKFdDKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShXZWJDb3JlOjpJbnRT
aXplIHZpZXdTaXplKSB7IH07CisjZW5kaWYKKwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKSB7IH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5tZXNzYWdlcy5pbgppbmRleCA5ZDVmNmRjYTZlMzguLjRhMDM4Mjg1NmFjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KQEAgLTQwLDYgKzQwLDEwIEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhIE5v
dFJlZkNvdW50ZWQgewogICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICNlbmRpZgogCisjaWYgVVNFKFdDKQorICAgIFVwZGF0ZUdlb21l
dHJ5KFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShHVEspCiAgICAgQWRqdXN0VHJhbnNpZW50Wm9vbShkb3VibGUgc2Nh
bGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQogICAgIENvbW1pdFRyYW5zaWVudFpvb20o
ZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZmUzMzZmZTU3YjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJl
YVdDLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFXQy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllcldDLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNs
dWRlICJXQ0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworRHJhd2luZ0FyZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogRHJhd2luZ0FyZWEo
RHJhd2luZ0FyZWFUeXBlV0NSZW1vdGUsIHBhcmFtZXRlcnMuZHJhd2luZ0FyZWFJZGVudGlmaWVy
LCB3ZWJQYWdlKQorICAgICwgbV9yb290TGF5ZXJDbGllbnQod2ViUGFnZSkKKyAgICAsIG1fcmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkobWFrZVVuaXF1ZTxSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eT4od2ViUGFnZSkpCisgICAgLCBtX2NvbnRleHQobWFrZVVuaXF1ZTxXQ0xheWVyRmFjdG9y
eT4oKnRoaXMpKQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMtPm1fcm9vdExheWVyQ2xpZW50KSkKKyAgICAsIG1fdXBk
YXRlUmVuZGVyaW5nVGltZXIoKnRoaXMsICZEcmF3aW5nQXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcp
CisgICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0
LldlYkNvbnRlbnQuUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuQ29tbWl0UXVldWUiX3MpKQor
eworICAgIHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5n
TW9kZSh0cnVlKTsKKworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJkcmF3aW5nIGFyZWEgcm9vdCIpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRDb250ZW50c09wYXF1ZSh0cnVlKTsK
KyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK0RyYXdpbmdBcmVhV0M6On5EcmF3aW5nQXJl
YVdDKCkgPSBkZWZhdWx0OworCitXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogRHJhd2lu
Z0FyZWFXQzo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9vdExheWVycygpCit7Cisg
ICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47CisgICAgaWYgKG1fY29udGVu
dExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqbV9jb250ZW50TGF5ZXIpOworICAg
ICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFw
cGVuZCgqbV92aWV3T3ZlcmxheVJvb3RMYXllcik7CisgICAgfQorCisgICAgbV9yb290TGF5ZXIt
PnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBk
YXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogcm9vdExheWVyKQoreworICAgIG1fY29udGVudExheWVyID0gcm9vdExh
eWVyOworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjph
dHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IGxheWVyOworICAgIHVwZGF0ZVJv
b3RMYXllcnMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRMYXllclRyZWVTdGF0ZUlz
RnJvemVuKGJvb2wgaXNGcm96ZW4pCit7CisgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5kZWQg
PT0gaXNGcm96ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNSZW5kZXJpbmdTdXNwZW5k
ZWQgPSBpc0Zyb3plbjsKKworICAgIGlmICghbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCAmJiBtX2hh
c0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJp
bmdVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgc3RhcnRSZW5kZXJpbmdVcGRhdGVUaW1lcigpOwor
ICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVHZW9tZXRyeShXZWJDb3JlOjpJ
bnRTaXplIHZpZXdTaXplKQoreworICAgIG1fd2ViUGFnZS5zZXRTaXplKHZpZXdTaXplKTsKKyAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKKworICAgIHRyaWdnZXJS
ZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXROZWVkc0Rpc3Bs
YXkoKQoreworICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5n
QXJlYVdDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
IHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzY3Jv
bGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChzY3JvbGxSZWN0KTsKKyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6c3RhcnRSZW5kZXJpbmdVcGRhdGVUaW1lcigpCit7CisgICAgaWYg
KG1fdXBkYXRlUmVuZGVyaW5nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdXBkYXRlUmVuZGVyaW5nVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFXQzo6dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpCit7CisgICAgaWYgKG1faXNSZW5k
ZXJpbmdTdXNwZW5kZWQpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9
IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydFJlbmRlcmluZ1VwZGF0
ZVRpbWVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMoV0NVcGF0
ZUluZm8mIGluZm8pCit7CisgICAgZm9yIChhdXRvJiBsYXllckluZm8gOiBpbmZvLmNoYW5nZWRM
YXllcnMpIHsKKyAgICAgICAgaWYgKGxheWVySW5mby5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGxheWVySW5mby5i
YWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgICAgICAgICBpbWFnZS0+Y3JlYXRl
Rmx1c2hlcigpLT5mbHVzaCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERyYXdpbmdB
cmVhV0M6OnVwZGF0ZVJlbmRlcmluZygpCit7CisgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5k
ZWQpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IHRydWU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWVudHJh
bnQsIGUuZy4gYSByQUYgY2FsbGJhY2sgbWF5IGZvcmNlIHJlcGFpbnQuCisgICAgaWYgKG1faW5V
cGRhdGVSZW5kZXJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJvb2w+
IGNoYW5nZShtX2luVXBkYXRlUmVuZGVyaW5nLCB0cnVlKTsKKyAgICBtX3dlYlBhZ2UudXBkYXRl
UmVuZGVyaW5nKCk7CisgICAgbV93ZWJQYWdlLmZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRl
KCk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOworCisgICAgT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZs
YWdzOworICAgIG1fd2ViUGFnZS5maW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShmbGFncyk7CisKKyAg
ICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3Qg
YXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0
byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAg
ICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHsgfSk7
CisKKyAgICBtX3VwZGF0ZUluZm8ucm9vdExheWVyID0gbV9yb290TGF5ZXItPnByaW1hcnlMYXll
cklEKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRjaChbJiwgdXBkYXRlSW5mbyA9IHN0
ZDo6ZXhjaGFuZ2UobV91cGRhdGVJbmZvLCB7IH0pXSgpIG11dGFibGUgeworICAgICAgICBmbHVz
aExheWVySW1hZ2VCdWZmZXJzKHVwZGF0ZUluZm8pOworICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goWyYsIHVwZGF0ZUluZm8gPSBXVEZNb3ZlKHVwZGF0ZUluZm8pXSgpIG11dGFibGUg
eworICAgICAgICAgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlKFdURk1v
dmUodXBkYXRlSW5mbykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEcmF3aW5n
QXJlYVdDOjpncmFwaGljc0xheWVyQWRkZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIGlkKQoreworICAgIG1fdXBkYXRlSW5mby5hZGRlZExheWVycy5hcHBlbmQoaWQp
OworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCkKK3sKKyAgICBtX3VwZGF0ZUluZm8u
cmVtb3ZlZExheWVycy5hcHBlbmQoaWQpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmNvbW1p
dExheWVyVXBhdGVJbmZvKFdDTGF5ZXJVcGF0ZUluZm8mJiBpbmZvKQoreworICAgIG1fdXBkYXRl
SW5mby5jaGFuZ2VkTGF5ZXJzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKK30KKworUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBEcmF3aW5nQXJlYVdDOjpjcmVhdGVJbWFnZUJ1ZmZlckZvckxh
eWVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKQoreworICAgIHJldHVybiBtX3dlYlBhZ2UuZW5z
dXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Cit9CisKK0RyYXdp
bmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KFdlYlBhZ2UmIHdlYlBh
Z2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
OjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0VG9QYWludCwgR3Jh
cGhpY3NMYXllclBhaW50QmVoYXZpb3IpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29u
dGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkudmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50
KSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Zsb2F0IERyYXdpbmdBcmVhV0M6OlJv
b3RMYXllckNsaWVudDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL0RyYXdpbmdBcmVhV0MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L3djL0RyYXdpbmdBcmVhV0MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmE5MmM0ZGJjNjkyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJG
YWN0b3J5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk7CitjbGFzcyBXQ0xheWVyRmFj
dG9yeTsKKworY2xhc3MgRHJhd2luZ0FyZWFXQyBmaW5hbCA6IHB1YmxpYyBEcmF3aW5nQXJlYSwg
cHVibGljIEdyYXBoaWNzTGF5ZXJXQzo6Q29vcmRpbmF0b3IgeworcHVibGljOgorICAgIERyYXdp
bmdBcmVhV0MoV2ViUGFnZSYsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKKyAg
ICB+RHJhd2luZ0FyZWFXQygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
Y3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZm9yY2VSZXBhaW50QXN5
bmMoV2ViUGFnZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRD
aGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3Zl
cnJpZGUgeyB9CisKKyAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9pc1JlbmRlcmluZ1N1c3BlbmRlZDsgfQorICAgIHZvaWQgdXBkYXRlR2VvbWV0
cnkoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkgb3ZlcnJpZGU7CisKKyAgICAvLyBHcmFwaGlj
c0xheWVyV0M6OkNvb3JkaW5hdG9yCisgICAgdm9pZCBncmFwaGljc0xheWVyQWRkZWQoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKSBvdmVycmlkZTsKKyAgICB2b2lkIGdy
YXBoaWNzTGF5ZXJSZW1vdmVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJ
bmZvJiYpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRl
SW1hZ2VCdWZmZXJGb3JMYXllcihXZWJDb3JlOjpGbG9hdFNpemUpIG92ZXJyaWRlOworCisgICAg
dm9pZCB1cGRhdGVSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nVXBkYXRlVGlt
ZXIoKTsKKworICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJvb3RMYXllckNsaWVudChX
ZWJQYWdlJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
UGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKyAgICB9Owor
CisgICAgUm9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworCisgICAgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk+IG1fcmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDTGF5ZXJGYWN0b3J5PiBtX2Nv
bnRleHQ7CisKKyAgICBXZWJDb3JlOjpUaW1lciBtX3VwZGF0ZVJlbmRlcmluZ1RpbWVyOworICAg
IGJvb2wgbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0Rl
ZmVycmVkUmVuZGVyaW5nVXBkYXRlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faW5VcGRhdGVSZW5k
ZXJpbmcgeyBmYWxzZSB9OworICAgIFdDVXBhdGVJbmZvIG1fdXBkYXRlSW5mbzsKKworICAgIFJl
ZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgUmVmPFdvcmtRdWV1ZT4g
bV9jb21taXRRdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YjU5Nzk0MDc3OTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFw
aGljc0xheWVyV0MuY3BwCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyV0MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworR3JhcGhpY3NMYXllcldDOjpHcmFwaGljc0xheWVyV0MoVHlwZSBsYXll
clR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwgQ29vcmRpbmF0b3ImIGNvb3JkaW5h
dG9yKQorICAgIDogR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKKyAgICAsIG1fY29v
cmRpbmF0b3IoY29vcmRpbmF0b3IpCit7CisgICAgbV9jb29yZGluYXRvci5ncmFwaGljc0xheWVy
QWRkZWQocHJpbWFyeUxheWVySUQoKSk7Cit9CisKK0dyYXBoaWNzTGF5ZXJXQzo6fkdyYXBoaWNz
TGF5ZXJXQygpCit7CisgICAgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgbV9jb29yZGluYXRvci5n
cmFwaGljc0xheWVyUmVtb3ZlZChwcmltYXJ5TGF5ZXJJRCgpKTsKK30KKworR3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIEdyYXBoaWNzTGF5ZXJXQzo6Z2VuZXJhdGVMYXllcklEKCkKK3sK
KyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkID0gMTsKKyAgICBy
ZXR1cm4gaWQrKzsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdyYXBoaWNz
TGF5ZXJXQzo6cHJpbWFyeUxheWVySUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVySUQ7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlm
ICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50UmVj
dCh7IHsgfSwgbV9zaXplIH0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdWxkQ2xpcFRv
TGF5ZXIpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpOwor
ICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
Q2hpbGRyZW4oVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4mJiBjaGlsZHJlbikKK3sKKyAgICBi
b29sIGNoaWxkcmVuQ2hhbmdlZCA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKFdURk1vdmUo
Y2hpbGRyZW4pKTsKKyAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQorICAgICAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworICAgIHJldHVybiBjaGls
ZHJlbkNoYW5nZWQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZChSZWY8R3Jh
cGhpY3NMYXllcj4mJiBjaGlsZExheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
KFdURk1vdmUoY2hpbGRMYXllcikpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpDaGlsZHJlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGls
ZEF0SW5kZXgoUmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXllciwgaW50IGluZGV4KQorewor
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBp
bmRleCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxk
cmVuKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQmVsb3coUmVmPEdyYXBo
aWNzTGF5ZXI+JiYgY2hpbGRMYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KFdURk1vdmUoY2hpbGRMYXllciksIHNpYmxpbmcp
OworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEFib3ZlKFJlZjxHcmFwaGljc0xh
eWVyPiYmIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3JhcGhp
Y3NMYXllcjo6YWRkQ2hpbGRBYm92ZShXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBzaWJsaW5nKTsKKyAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQor
Citib29sIEdyYXBoaWNzTGF5ZXJXQzo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENo
aWxkLCBSZWY8R3JhcGhpY3NMYXllcj4mJiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NM
YXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBXVEZNb3ZlKG5ld0NoaWxkKSkpIHsKKyAgICAg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyV0M6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIGlmIChtX3BhcmVudCkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcldDKj4obV9wYXJlbnQpLT5ub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworICAgIEdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dE1hc2tMYXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4mJiBsYXllcikKK3sKKyAgICBpZiAobGF5
ZXIgPT0gbV9tYXNrTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldE1hc2tMYXllcihXVEZNb3ZlKGxheWVyKSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxh
eWVyID09IG1fcmVwbGljYXRlZExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRSZXBsaWNhdGVkTGF5ZXIobGF5ZXIpOworICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5
ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihXVEZNb3ZlKGxheWVy
KSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FM
YXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQgPT0gbV9wb3NpdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocG9pbnQpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBv
aW50KQoreworICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwb2ludCk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyV0M6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlm
IChzaXplID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6
c2V0U2l6ZShzaXplKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Qm91bmRzT3JpZ2lu
KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbikKK3sKKyAgICBpZiAob3JpZ2luID09IG1fYm91bmRz
T3JpZ2luKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCb3VuZHNP
cmlnaW4ob3JpZ2luKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0ID09IHRyYW5zZm9ybSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBpZiAodCA9PSBjaGlsZHJlblRyYW5zZm9y
bSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRy
YW5zZm9ybSh0KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW5UcmFuc2Zvcm0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0UHJlc2Vy
dmVzM0QoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gcHJlc2VydmVzM0QoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKHZhbHVlKTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0Qp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91bmRzKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKHZhbHVlKTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSBvcGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6T3BhY2l0eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNS
ZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpD
b250ZW50c1JlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3NDb250ZW50
KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQorICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZhbHVlKTsKKyAg
ICBpZiAoIXZhbHVlKQorICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6QmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRl
bnRzVmlzaWJsZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0FyZVZp
c2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VmlzaWJsZSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFu
Z2U6OkNvbnRlbnRzVmlzaWJsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VW
aXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlm
IChjb2xvciA9PSBtX3NvbGlkQ29sb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc29saWRD
b2xvciA9IGNvbG9yOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpTb2xpZENvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFNob3dEZWJ1Z0Jv
cmRlcihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ0RlYnVnQm9yZGVyKCkgPT0gc2hv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9y
ZGVyKHNob3cpOworICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworICAgIG5vdGVMYXllclBy
b3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJXQzo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3
aWR0aCkKK3sKKyAgICBtX2RlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKKyAgICBtX2RlYnVnQm9y
ZGVyV2lkdGggPSB3aWR0aDsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6RGVidWdWaXN1YWxzKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFNob3dS
ZXBhaW50Q291bnRlcihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3Vu
dGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJzQ2Fu
QmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgaWYg
KCFmaWx0ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChjb25z
dCBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gOiBmaWx0ZXJzLm9wZXJhdGlvbnMoKSkgeworICAgICAg
ICBpZiAoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVO
Q0UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCit7CisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAgICBpZiAoR3JhcGhpY3NMYXllcjo6ZmlsdGVy
cygpID09IGZpbHRlcnMpCisgICAgICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworCisg
ICAgaWYgKGNhbkNvbXBvc2l0ZUZpbHRlcnMpIHsKKyAgICAgICAgaWYgKCFHcmFwaGljc0xheWVy
OjpzZXRGaWx0ZXJzKGZpbHRlcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0g
ZWxzZSBpZiAoR3JhcGhpY3NMYXllcjo6ZmlsdGVycygpLnNpemUoKSkKKyAgICAgICAgY2xlYXJG
aWx0ZXJzKCk7CisKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6
RmlsdGVycyk7CisgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKK3sKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJzQ2FuQmVD
b21wb3NpdGVkKGZpbHRlcnMpOworICAgIGlmIChtX2JhY2tkcm9wRmlsdGVycyA9PSBmaWx0ZXJz
KQorICAgICAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKKworICAgIGlmIChjYW5Db21w
b3NpdGVGaWx0ZXJzKQorICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnMo
ZmlsdGVycyk7CisgICAgZWxzZQorICAgICAgICBjbGVhckJhY2tkcm9wRmlsdGVycygpOworCisg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVy
cyk7CisKKyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
YmFja2Ryb3BGaWx0ZXJzUmVjdCkKK3sKKyAgICBpZiAobV9iYWNrZHJvcEZpbHRlcnNSZWN0ID09
IGJhY2tkcm9wRmlsdGVyc1JlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5
ZXI6OnNldEJhY2tkcm9wRmlsdGVyc1JlY3QoYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CisgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9u
U2V0PFdDTGF5ZXJDaGFuZ2U+IGZsYWdzLCBTY2hlZHVsZUZsdXNoT3JOb3Qgc2NoZWR1bGVGbHVz
aCkKK3sKKyAgICBpZiAoYmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ym9vbCBoYWRVbmNvbW1pdHRlZENoYW5nZXMgPSAhIW1fdW5jb21taXR0ZWRDaGFuZ2VzOworCisg
ICAgbV91bmNvbW1pdHRlZENoYW5nZXMuYWRkKGZsYWdzKTsKKworICAgIGlmIChzY2hlZHVsZUZs
dXNoID09IFNjaGVkdWxlRmx1c2gpIHsKKyAgICAgICAgYm9vbCBuZWVkc0ZsdXNoID0gIWhhZFVu
Y29tbWl0dGVkQ2hhbmdlczsKKyAgICAgICAgaWYgKG5lZWRzRmx1c2gpCisgICAgICAgICAgICBj
bGllbnQoKS5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKGF1dG8qIG1hc2sgPSBtYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFzay0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgaWYgKGF1dG8qIHJl
cGxpY2EgPSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYS0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpCisg
ICAgICAgIGNoaWxkLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUocmVjdCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKK3sK
KyAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBX
Q0xheWVyVXBhdGVJbmZvIHVwZGF0ZTsKKyAgICB1cGRhdGUuaWQgPSBwcmltYXJ5TGF5ZXJJRCgp
OworICAgIHVwZGF0ZS5jaGFuZ2VzID0gc3RkOjpleGNoYW5nZShtX3VuY29tbWl0dGVkQ2hhbmdl
cywgeyB9KTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJl
bikgeworICAgICAgICB1cGRhdGUuY2hpbGRyZW4gPSBXVEY6Om1hcChjaGlsZHJlbigpLCBbXShh
dXRvJiBsYXllcikgeworICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5wcmltYXJ5TGF5ZXJJRCgp
OworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6TWFza0xheWVyKSB7CisgICAgICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgICAg
IHVwZGF0ZS5tYXNrTGF5ZXIgPSBtYXNrTGF5ZXIoKS0+cHJpbWFyeUxheWVySUQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLm1hc2tMYXllciA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVy
KSB7CisgICAgICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZS5yZXBs
aWNhTGF5ZXIgPSByZXBsaWNhTGF5ZXIoKS0+cHJpbWFyeUxheWVySUQoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXllciA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAg
ICAgICAgdXBkYXRlLnBvc2l0aW9uID0gcG9zaXRpb24oKTsKKyAgICAgICAgdXBkYXRlLmFuY2hv
clBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICAgICAgdXBkYXRlLnNpemUgPSBzaXplKCk7Cisg
ICAgICAgIHVwZGF0ZS5ib3VuZHNPcmlnaW4gPSBib3VuZHNPcmlnaW4oKTsKKyAgICB9CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAg
IHVwZGF0ZS5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICB1cGRhdGUuY29udGVu
dHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICB1cGRhdGUuY29udGVudHNWaXNpYmxl
ID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICB1cGRhdGUuYmFja2ZhY2VWaXNp
YmlsaXR5ID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKKyAgICAgICAgdXBkYXRlLm1hc2tzVG9Cb3Vu
ZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250
ZW50c0FyZVZpc2libGUoKSAmJiAhc2l6ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0
byBpbWFnZSA9IG1fY29vcmRpbmF0b3IuY3JlYXRlSW1hZ2VCdWZmZXJGb3JMYXllcihzaXplKCkp
OworICAgICAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0geyB7IH0sIHNpemUoKSB9OworICAg
ICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoaW1hZ2UtPmNvbnRleHQoKSwgY2xp
cFJlY3QpOworICAgICAgICAgICAgaW1hZ2UtPmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwor
ICAgICAgICAgICAgdXBkYXRlLmJhY2tpbmdTdG9yZS5zZXRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlt
YWdlKSk7CisKKyAgICAgICAgICAgIGluY3JlbWVudFJlcGFpbnRDb3VudCgpOworICAgICAgICAg
ICAgdXBkYXRlLmNoYW5nZXMuYWRkKFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29s
aWRDb2xvcikKKyAgICAgICAgdXBkYXRlLnNvbGlkQ29sb3IgPSBtX3NvbGlkQ29sb3I7CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKSB7CisgICAg
ICAgIHVwZGF0ZS5zaG93RGVidWdCb3JkZXIgPSBpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpOworICAg
ICAgICB1cGRhdGUuZGVidWdCb3JkZXJDb2xvciA9IG1fZGVidWdCb3JkZXJDb2xvcjsKKyAgICAg
ICAgdXBkYXRlLmRlYnVnQm9yZGVyV2lkdGggPSBtX2RlYnVnQm9yZGVyV2lkdGg7CisgICAgfQor
ICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkgewor
ICAgICAgICB1cGRhdGUuc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKTsKKyAgICAgICAgdXBkYXRlLnJlcGFpbnRDb3VudCA9IHJlcGFpbnRDb3VudCgpOworICAg
IH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQorICAg
ICAgICB1cGRhdGUub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCisgICAgICAgIHVwZGF0ZS50cmFuc2Zvcm0gPSB0
cmFuc2Zvcm0oKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGls
ZHJlblRyYW5zZm9ybSkKKyAgICAgICAgdXBkYXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRy
ZW5UcmFuc2Zvcm0oKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpG
aWx0ZXJzKQorICAgICAgICB1cGRhdGUuZmlsdGVycyA9IGZpbHRlcnMoKTsKKyAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpIHsKKyAgICAgICAg
dXBkYXRlLmJhY2tkcm9wRmlsdGVycyA9IGJhY2tkcm9wRmlsdGVycygpOworICAgICAgICB1cGRh
dGUuYmFja2Ryb3BGaWx0ZXJzUmVjdCA9IGJhY2tkcm9wRmlsdGVyc1JlY3QoKTsKKyAgICB9CisK
KyAgICBtX2Nvb3JkaW5hdG9yLmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1vdmUodXBkYXRlKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjczMDg2OWJiYjg2NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oCkBAIC0w
LDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29vcmRpbmF0b3Igewor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZ3JhcGhpY3NMYXllckFkZGVkKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ3JhcGhp
Y3NMYXllclJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBh
dGVJbmZvJiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUltYWdlQnVmZmVyRm9yTGF5ZXIoV2ViQ29yZTo6RmxvYXRTaXplKSA9IDA7Cisg
ICAgfTsKKworICAgIEdyYXBoaWNzTGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudCYsIENvb3JkaW5hdG9yJik7CisgICAgfkdyYXBoaWNzTGF5ZXJXQygp
IG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
IHByaW1hcnlMYXllcklEKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBTaG91bGRDbGlwVG9MYXllcikgb3ZlcnJpZGU7CisKKyAgICBib29s
IHNldENoaWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkQ2hpbGQoUmVmPEdyYXBoaWNzTGF5ZXI+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
YWRkQ2hpbGRBdEluZGV4KFJlZjxHcmFwaGljc0xheWVyPiYmLCBpbnQgaW5kZXgpIG92ZXJyaWRl
OworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NM
YXllciogc2libGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KFJlZjxHcmFw
aGljc0xheWVyPiYmLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsKKyAgICBib29s
IHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgUmVmPEdyYXBoaWNzTGF5ZXI+
JiYgbmV3Q2hpbGQpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xheWVyPiYmKTsKKyAg
ICB2b2lkIHNldFJlcGxpY2F0ZWRMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRS
ZXBsaWNhdGVkQnlMYXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBzZXRQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRBbmNob3JQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJlc2Vy
dmVzM0QoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50
c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHko
Ym9vbCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNob3VsZERpcmVjdGx5Q29t
cG9zaXRlSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IHdpZHRoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBvdmVycmlkZTsK
KyAgICBib29sIHNldEZpbHRlcnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92
ZXJyaWRlOworICAgIGJvb2wgc2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1JlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBm
bHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZW51bSBTY2hlZHVsZUZsdXNoT3JOb3QgOiBi
b29sIHsgU2NoZWR1bGVGbHVzaCwgRG9udFNjaGVkdWxlRmx1c2ggfTsKKyAgICB2b2lkIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChPcHRpb25TZXQ8V0NMYXllckNoYW5nZT4sIFNjaGVkdWxlRmx1
c2hPck5vdCA9IFNjaGVkdWxlRmx1c2gpOworCisgICAgc3RhdGljIEdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRCBnZW5lcmF0ZUxheWVySUQoKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVySUQgeyBnZW5lcmF0ZUxheWVySUQoKSB9Owor
ICAgIENvb3JkaW5hdG9yJiBtX2Nvb3JkaW5hdG9yOworICAgIE9wdGlvblNldDxXQ0xheWVyQ2hh
bmdlPiBtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBXZWJDb3JlOjpDb2xvciBtX3NvbGlkQ29s
b3I7CisgICAgV2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgIGZsb2F0IG1f
ZGVidWdCb3JkZXJXaWR0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFja2luZ1N0b3Jl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZGVkZjZmOWJkYjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9X
Q0JhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxvcHRpb25hbD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQmFja2luZ1N0b3JlIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ0JhY2tpbmdTdG9yZSgpIHsgfQor
CisgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6
OkltYWdlQnVmZmVyPiYmIGltYWdlKSB7IG1faW1hZ2VCdWZmZXIgPSBXVEZNb3ZlKGltYWdlKTsg
fQorCisgICAgU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcC5nZXQo
KTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgYm9vbCBoYXNJbWFnZUJ1ZmZlciA9
IG1faW1hZ2VCdWZmZXI7CisgICAgICAgIGVuY29kZXIgPDwgaGFzSW1hZ2VCdWZmZXI7CisKKyAg
ICAgICAgaWYgKGhhc0ltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0
YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqbV9p
bWFnZUJ1ZmZlci0+ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NCYWNraW5nU3RvcmUm
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJvb2wgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzSW1hZ2VCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmIChoYXNJbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaGFuZGxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IFdURjo6c3dpdGNoT24oaGFuZGxlLAorICAgICAgICAgICAgICAgIFsmXSAoU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGhhbmRsZSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQubV9iaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXll
ckZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXll
ckZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDBh
ODBkYzMyNGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDTGF5ZXJGYWN0b3J5LmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0NMYXllckZhY3Rvcnk6OldDTGF5ZXJGYWN0b3J5KEdy
YXBoaWNzTGF5ZXJXQzo6Q29vcmRpbmF0b3ImIGNvb3JkaW5hdG9yKQorICAgIDogbV9jb29yZGlu
YXRvcihjb29yZGluYXRvcikKK3sKK30KKworUmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IFdD
TGF5ZXJGYWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlR5cGUgbGF5ZXJUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllcldDKGxheWVyVHlwZSwgY2xp
ZW50LCBtX2Nvb3JkaW5hdG9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3Rvcnku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNGJhYjUxNzQ5ZmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xh
eWVyRmFjdG9yeS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0xh
eWVyRmFjdG9yeSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7
CitwdWJsaWM6CisgICAgV0NMYXllckZhY3RvcnkoR3JhcGhpY3NMYXllcldDOjpDb29yZGluYXRv
ciYpOworCitwcml2YXRlOgorICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5Cisg
ICAgUmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6VHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYpIG92
ZXJyaWRlOworCisgICAgR3JhcGhpY3NMYXllcldDOjpDb29yZGluYXRvciYgbV9jb29yZGluYXRv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi42MjNmNzg3NGZmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCkBAIC0wLDAgKzEsMjg2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV0NCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDx3
dGYvRW51bVRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2VudW0gY2xhc3MgV0NMYXllckNoYW5nZSA6IHVpbnQzMl90IHsKKyAgICBD
aGlsZHJlbiAgICAgICAgICAgICAgICA9IDEgPDwgIDAsCisgICAgTWFza0xheWVyICAgICAgICAg
ICAgICAgPSAxIDw8ICAxLAorICAgIFJlcGxpY2FMYXllciAgICAgICAgICAgID0gMSA8PCAgMiwK
KyAgICBHZW9tZXRyeSAgICAgICAgICAgICAgICA9IDEgPDwgIDMsCisgICAgUHJlc2VydmVzM0Qg
ICAgICAgICAgICAgPSAxIDw8ICA0LAorICAgIENvbnRlbnRzVmlzaWJsZSAgICAgICAgID0gMSA8
PCAgNSwKKyAgICBCYWNrZmFjZVZpc2liaWxpdHkgICAgICA9IDEgPDwgIDYsCisgICAgTWFza3NU
b0JvdW5kcyAgICAgICAgICAgPSAxIDw8ICA3LAorICAgIFNvbGlkQ29sb3IgICAgICAgICAgICAg
ID0gMSA8PCAgOCwKKyAgICBEZWJ1Z1Zpc3VhbHMgICAgICAgICAgICA9IDEgPDwgIDksCisgICAg
UmVwYWludENvdW50ICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgIENvbnRlbnRzUmVjdCAgICAg
ICAgICAgID0gMSA8PCAxMSwKKyAgICBPcGFjaXR5ICAgICAgICAgICAgICAgICA9IDEgPDwgMTIs
CisgICAgQmFja2luZ1N0b3JlICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgIFRyYW5zZm9ybSAg
ICAgICAgICAgICAgID0gMSA8PCAxNCwKKyAgICBDaGlsZHJlblRyYW5zZm9ybSAgICAgICA9IDEg
PDwgMTUsCisgICAgRmlsdGVycyAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAorICAgIEJhY2tk
cm9wRmlsdGVycyAgICAgICAgID0gMSA8PCAxNywKKyAgICAvLyBBbmltYXRpb24KK307CisKK3N0
cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgaWQ7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IGNoYW5nZXM7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gY2hpbGRy
ZW47CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQ+IG1hc2tMYXllcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gcmVwbGljYUxheWVyOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgcG9zaXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm91bmRz
T3JpZ2luOworICAgIGJvb2wgbWFza3NUb0JvdW5kczsKKyAgICBib29sIHNob3dEZWJ1Z0JvcmRl
cjsKKyAgICBib29sIHNob3dSZXBhaW50Q291bnRlcjsKKyAgICBib29sIGNvbnRlbnRzVmlzaWJs
ZTsKKyAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICBib29sIHByZXNlcnZlczNEOwor
ICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdC
b3JkZXJDb2xvcjsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lk
dGg7CisgICAgaW50IHJlcGFpbnRDb3VudDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udGVu
dHNSZWN0OworICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsKKyAgICBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyBmaWx0ZXJzOworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJz
OworICAgIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgaWQ7CisgICAgICAgIGVuY29k
ZXIgPDwgY2hhbmdlczsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGls
ZHJlbikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY2hpbGRyZW47CisgICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6TWFza0xheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBt
YXNrTGF5ZXI7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxh
eWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCByZXBsaWNhTGF5ZXI7CisgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpCisgICAgICAgICAgICBlbmNvZGVyIDw8
IHBvc2l0aW9uIDw8IGFuY2hvclBvaW50IDw8IHNpemUgPDwgYm91bmRzT3JpZ2luOworICAgICAg
ICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKQorICAgICAgICAgICAg
ZW5jb2RlciA8PCBwcmVzZXJ2ZXMzRDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpDb250ZW50c1Zpc2libGUpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzVmlz
aWJsZTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2li
aWxpdHkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAg
ICAgZW5jb2RlciA8PCBtYXNrc1RvQm91bmRzOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNvbGlkQ29sb3I7
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCBzaG93RGVidWdCb3JkZXIgPDwgZGVidWdCb3JkZXJDb2xvciA8
PCBkZWJ1Z0JvcmRlcldpZHRoOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlJlcGFpbnRDb3VudCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc2hvd1JlcGFpbnRDb3VudGVy
IDw8IHJlcGFpbnRDb3VudDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpD
b250ZW50c1JlY3QpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzUmVjdDsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQorICAgICAgICAgICAgZW5j
b2RlciA8PCBvcGFjaXR5OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tpbmdTdG9yZSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2luZ1N0b3JlOworICAgICAg
ICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgdHJhbnNmb3JtOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICAgICAgZW5jb2RlciA8PCBjaGlsZHJlblRyYW5z
Zm9ybTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCBmaWx0ZXJzOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2Ry
b3BGaWx0ZXJzIDw8IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PGNsYXNzIERlY29kZXI+CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBXQ0xheWVyVXBhdGVJbmZvJiByZXN1bHQpCisgICAgeworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZXMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIp
IHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tMYXllcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwbGljYUxheWVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hbmNob3JQb2ludCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzT3JpZ2luKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnByZXNlcnZlczNEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q29udGVudHNWaXNpYmxlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb250ZW50c1Zpc2libGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFj
ZVZpc2liaWxpdHkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJh
Y2tmYWNlVmlzaWJpbGl0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9C
b3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tzVG9C
b3VuZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKSB7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zb2xpZENvbG9yKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKSB7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaG93RGVidWdCb3JkZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVn
Qm9yZGVyQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyV2lkdGgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnNob3dSZXBhaW50Q291bnRlcikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVw
YWludENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KSB7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1JlY3QpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVz
dWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5iYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zv
cm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5zZm9ybSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChy
ZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKSB7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlblRyYW5zZm9ybSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpCYWNrZHJvcEZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmJhY2tkcm9wRmlsdGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzUmVj
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KK307CisKK3N0cnVjdCBXQ1VwYXRlSW5mbyB7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIHJvb3RMYXllcjsKKyAgICBWZWN0b3I8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBhZGRlZExheWVyczsKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiByZW1vdmVk
TGF5ZXJzOworICAgIFZlY3RvcjxXQ0xheWVyVXBhdGVJbmZvPiBjaGFuZ2VkTGF5ZXJzOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCByb290TGF5ZXI7CisgICAgICAg
IGVuY29kZXIgPDwgYWRkZWRMYXllcnM7CisgICAgICAgIGVuY29kZXIgPDwgcmVtb3ZlZExheWVy
czsKKyAgICAgICAgZW5jb2RlciA8PCBjaGFuZ2VkTGF5ZXJzOworICAgIH0KKworICAgIHRlbXBs
YXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NVcGF0ZUluZm8mIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJvb3RMYXllcikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFkZGVkTGF5
ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQucmVtb3ZlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZWRMYXllcnMpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViS2l0OjpXQ0xheWVyQ2hhbmdlPiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlLAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJD
aGFuZ2U6Ok1hc2tMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpSZXBsaWNh
TGF5ZXIsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6R2VvbWV0cnksCisgICAgICAg
IFdlYktpdDo6V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QsCisgICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U6OkJhY2tmYWNlVmlzaWJpbGl0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpN
YXNrc1RvQm91bmRzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3Is
CisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzLAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCwKKyAgICAgICAgV2ViS2l0OjpXQ0xh
eWVyQ2hhbmdlOjpDb250ZW50c1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6
T3BhY2l0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUsCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OkZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2Ry
b3BGaWx0ZXJzCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zV2luQ2Fpcm8uY21ha2UKaW5kZXggNTEyMzkyZTY0MjRlLi5kZDRiNTk0NTU3Y2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtNTcsNiArNTcsNyBAQCBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
TUVESUFfRk9VTkRBVElPTiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9JTlNQRUNU
T1JfU09DS0VUX1NFUlZFUiAke0VOQUJMRV9SRU1PVEVfSU5TUEVDVE9SfSkKK1NFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9XQyBPTikKIAogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxF
X0RFVkVMT1BFUl9NT0RFICR7REVWRUxPUEVSX01PREV9KQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440578</attachid>
            <date>2021-10-07 23:42:15 -0700</date>
            <delta_ts>2021-10-15 00:47:15 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2021-10-08.diff</filename>
            <type>text/plain</type>
            <size>116585</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IGQyMjU2OTBmNWUwNC4uNTFm
Yzk3NTYwOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTEyLDYg
KzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbG9hZGVyL2FyY2hpdmUvY2YiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NmIgor
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93YyIKICkKIAogbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC0yNCw2ICsyNSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcApAQCAtNDQsNiArNDcsMTEgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCiApCiAKK2xp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2Mv
V0NQbGF0Zm9ybUxheWVyR0NHTC5oCispCisKIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVT
CiAgICAgY29tY3RsMzIKICAgICBjcnlwdDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZS5jcHAKaW5kZXggN2FlZTM4ZjM5ZjNiLi40MmNkYjc3MDgzYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAKQEAgLTI5LDYgKzI5LDEwIEBACiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCkBAIC0x
MjYsNyArMTMwLDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGF2YWlsYWJsZUV4dGVuc2kKICAgICAgICAgbV9yZXF1ZXN0
YWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0Ep
CisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdSQVBISUNTX0xBWUVSX1dDKQogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oCmluZGV4IGU5ZWNiODdjNzBh
NS4uOGU5NTU5YWY1ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmgK
QEAgLTk5LDYgKzk5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdM
TGF5ZXI7CisjZWxpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgUGxhdGZvcm1MYXllckNv
bnRhaW5lciBtX3BsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIAogICAgIC8vIEd1YXJkZWQgYnkgd2Fp
dFVudGlsSW5pdGlhbGl6ZWQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2VXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45
YTliZTU3YjZjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wp
ICYmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIldDUGxhdGZvcm1MYXllckdD
R0wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworICAgIG1fcGxhdGZvcm1MYXll
ciA9IG1ha2VVbmlxdWU8V0NQbGF0Zm9ybUxheWVyR0NHTD4oKTsKK30KKworUGxhdGZvcm1MYXll
ciogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmNhMzllMDhjY2NlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllci5oCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdDUGxh
dGZvcm1MYXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3ByaXZhdGU6CisgICAgLy8gVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIKKyAgICB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KSBm
aW5hbCB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWM4NjUxN2NhYTA4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0
Zm9ybUxheWVyR0NHTC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXJHQ0dMIDogcHVibGljIFdDUGxhdGZvcm1MYXll
ciB7CitwdWJsaWM6CisgICAgdWludDY0X3QgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCkg
eyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7IH0KKyAgICB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcih1aW50NjRfdCBpZCkgeyBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciA9IGlkOyB9CisKK3ByaXZhdGU6CisgICAgdWludDY0X3QgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKaW5kZXggZWZiYjM2ZmI1MWYwLi4yNWUzMzYwNGQ5MmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xl
YXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93
c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkK
IHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gMDsKICAg
ICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNFKENBSVJPKQogICAgIGhkYyA9IGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggNWQxMzRjMDljNGZjLi5hMWViZmNlYjgzYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCkBAIC0y
ODUyLDE1ICsyODUyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJyZW50RnJhbWUoV2ViCiAgICAgICAgIEFTU0VS
VChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCk7CiAKICAgICAgICAgY2Fpcm9f
c3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBD
QUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAgICAgIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBj
YWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOwotCi0gICAgICAgIEZsb2F0UmVjdCBz
cmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoaW1hZ2UpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgICAg
IGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgICAgICAgICAgQ2Fpcm86OmRyYXdT
dXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShp
bWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkg
eworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWly
b0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpKTsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2Ug
PSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOworICAgICAgICAgICAgRmxv
YXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBjb250ZXh0
LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1JlY3Quc2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVj
dCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGltcGxlbWVu
dCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggODVjYTg4ZjdhOTgyLi5kMTM2YWVkMDgzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAg
LTE0Myw2ICsxNDMsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAj
ZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJSZW1vdGVXQ0xh
eWVyVHJlZUhvc3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkBAIC0zMjMsNiArMzI3LDI5IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiBjaGFubmVs
TmFtCiAjZW5kaWYKIH0KIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKK3ZvaWQgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXll
clRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCit7
CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5lbnN1cmUo
aWRlbnRpZmllciwgWyZdKCkgeworICAgICAgICByZXR1cm4gUmVtb3RlV0NMYXllclRyZWVIb3N0
OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoaWRlbnRpZmllciksIG5hdGl2ZVdpbmRvdyk7CisgICAg
fSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
K30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVI
b3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKK30KKworUmVm
UHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpm
aW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgYXV0byBpdGVyID0gbV9yZW1vdGVHcmFwaGljc0NvbnRleHRHTE1h
cC5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyID09IG1fcmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBpdGVy
LT52YWx1ZS5nZXQoKTsKK30KKyNlbmRpZgorCiBib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8mIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNYXAu
dmFsdWVzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDA1YTUwNWZlZTMyOS4uN2ExNmM3YTQzYmI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTUzLDYgKzUzLDEwIEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxh
eUNvbmZpZ3VyYXRpb24uaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
I2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkRhdGE7CkBAIC04MSw2ICs4NSw3IEBAIGNsYXNzIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5l
clByb3h5OwogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKIGNsYXNzIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOwogY2xhc3MgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
cjsKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHk7CiBzdHJ1Y3QgR1BVUHJvY2Vzc0Nvbm5lY3Rpb25QYXJhbWV0ZXJzOwogc3Ry
dWN0IE1lZGlhT3ZlcnJpZGVzRm9yVGVzdGluZzsKQEAgLTE1Miw2ICsxNTcsMTAgQEAgcHVibGlj
OgogICAgIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5JiBpbWFnZURlY29kZXJBVkZQcm94eSgp
OwogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgUmVmUHRyPFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMPiBmaW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyNlbmRpZgorCiAgICAgdm9pZCB1cGRhdGVTdXBwb3J0ZWRS
ZW1vdGVDb21tYW5kcygpOwogCiAgICAgYm9vbCBhbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3Vy
ZSgpIGNvbnN0OwpAQCAtMjE3LDYgKzIyNiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VXNl
clByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgY29u
ZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiwgV1RGTG9nQ2hhbm5lbFN0YXRlLCBX
VEZMb2dMZXZlbCk7CiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgdm9pZCBjcmVh
dGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLCB1aW50
NjRfdCBuYXRpdmVXaW5kb3cpOworICAgIHZvaWQgcmVsZWFzZVdDTGF5ZXJUcmVlSG9zdChXZWJL
aXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIpOworI2VuZGlmCisKICAgICAvLyBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmlu
YWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpNZXNzYWdlTmFtZSkgZmluYWw7CkBAIC0yOTYsNiArMzEwLDExIEBAIHByaXZhdGU6CiAg
ICAgdXNpbmcgUmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFwID0gSGFzaE1hcDxSZW1vdGVB
dWRpb0hhcmR3YXJlTGlzdGVuZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlQXVk
aW9IYXJkd2FyZUxpc3RlbmVyUHJveHk+PjsKICAgICBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVu
ZXJNYXAgbV9yZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXA7CiAKKyNpZiBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCisgICAgdXNpbmcgUmVtb3RlV0NMYXllclRyZWVIb3N0TWFwID0gSGFzaE1h
cDxXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLCBSZWY8UmVtb3RlV0NMYXllclRyZWVIb3N0Pj47
CisgICAgUmVtb3RlV0NMYXllclRyZWVIb3N0TWFwIG1fcmVtb3RlV0NMYXllclRyZWVIb3N0TWFw
OworI2VuZGlmCisKICAgICBSZWZQdHI8UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHk+
IG1fcmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyOwogICAgIGJvb2wgbV9pc0FjdGl2ZU5vd1Bs
YXlpbmdQcm9jZXNzIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRl
eCBmZTQ4Y2EyMGJhMDguLjhlYTQ5YWVjZmY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4KQEAgLTUxLDYgKzUxLDEwIEBAIG1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgewogICAgIFJlbGVhc2VSZW1vdGVDb21tYW5kTGlzdGVu
ZXIoV2ViS2l0OjpSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCiAgICAgU2V0VXNlclByZWZlcnJlZExhbmd1YWdlcyhWZWN0b3I8U3RyaW5nPiBsYW5ndWFn
ZXMpCiAgICAgQ29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5nIGNoYW5uZWxOYW1lLCBlbnVt
OnVpbnQ4X3QgV1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVtOnVpbnQ4X3QgV1RGTG9nTGV2
ZWwgbGV2ZWwpCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIENyZWF0ZVdDTGF5ZXJU
cmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWlu
dDY0X3QgbmF0aXZlV2luZG93KQorICAgIFJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpX
Q0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCisjZW5kaWYKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggMTNlNDdm
YmI5Yzg5Li41ZDU1MjFmMzNiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCkBAIC03MSw2ICs3
MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CiAjZW5k
aWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w+IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7
IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAg
ICB2b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90
ZVdDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjU4NThiMmU1OTVlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0w
LDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9z
dE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJX
Q1VwYXRlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBw
ZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0lQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xT
dHJlYW1Xb3JrUXVldWUoKTsKKworc3RydWN0IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6TGF5ZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExheWVyKTsKK3B1YmxpYzoKKyAgICBMYXllcigpID0gZGVmYXVsdDsKKworICAgIFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciB0ZXhtYXBMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4
dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gYmFja2Ryb3BMYXllcjsKKyAgICBSZWZQdHI8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w+IHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOworICAgIFJlZlB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gZ2NnbE9wZW5HTDsKK307CisKK1Jl
ZjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYktpdDo6
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5k
b3cpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV0NMYXllclRyZWVIb3N0KGNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGlkZW50aWZpZXIsIG5hdGl2ZVdpbmRvdykpOworfQorCitS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdChHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5ZXJUcmVl
SG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQorICAgIDog
bV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MpKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCit7CisgICAgbV9jb25uZWN0aW9u
VG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lk
ZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZigq
dGhpcyksIG5hdGl2ZVdpbmRvd10geworICAgICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRl
eHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgICAgICBtX2Nv
bnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxIV05EPihuYXRpdmVXaW5kb3cpKTsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVh
dGUoKTsKKyAgICB9KTsKKworfQorCitSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6On5SZW1vdGVXQ0xh
eWVyVHJlZUhvc3QoKQoreworICAgIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJl
Y2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVy
VHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkp
OworICAgIC8vIERlc3Ryb3kgdGhlIGNvbnRleHQgaW4gdGhlIHdvcmsgcXVldWUgdGhyZWFkCisg
ICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbY29u
dGV4dCA9IHN0ZDo6ZXhjaGFuZ2UobV9jb250ZXh0LCBudWxscHRyKV0geyB9KTsKK30KKworSVBD
OjpDb25uZWN0aW9uKiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29u
bmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZGVudGlmaWVyLnRv
VUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUoV0NVcGF0
ZUluZm8mJiB1cGRhdGUpCit7CisgICAgYXV0byByZW1vdGVHQ0dMID0gV1RGOjptYXAodXBkYXRl
LmNoYW5nZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXllclVwZGF0ZSkgLT4gUmVmUHRyPFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMPiB7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgeworICAgICAgICAgICAgaWYgKGxheWVyVXBk
YXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wobWFr
ZU9iamVjdElkZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyVHlwZT4obGF5ZXJV
cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0
cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlz
KSwgdXBkYXRlID0gV1RGTW92ZSh1cGRhdGUpLCByZW1vdGVHQ0dMID0gV1RGTW92ZShyZW1vdGVH
Q0dMKV0geworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yIChhdXRvIGlkIDogdXBkYXRlLmFkZGVk
TGF5ZXJzKSB7CisgICAgICAgICAgICBhdXRvIGxheWVyID0gbWFrZVVuaXF1ZTxMYXllcj4oKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byByZW1vdGVHQ0dMSXRlcmF0b3IgPSByZW1vdGVHQ0dMLmJlZ2luKCk7
CisKKyAgICAgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJz
KSB7CisgICAgICAgICAgICBhdXRvIGxheWVyID0gbV9sYXllcnMuZ2V0KGxheWVyVXBkYXRlLmlk
KTsKKyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hpbGRy
ZW4oV1RGOjptYXAobGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAmbV9sYXllcnMuZ2V0KGlkKS0+dGV4bWFwTGF5ZXI7CisgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheWVyVXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIpIHsKKyAgICAgICAgICAgICAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG1hc2tMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgaWYgKGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAgICAgICAgICAgICAgICAgbWFza0xh
eWVyID0gJm1fbGF5ZXJzLmdldCgqbGF5ZXJVcGRhdGUubWFza0xheWVyKS0+dGV4bWFwTGF5ZXI7
CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tMYXllcihtYXNrTGF5
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIHJlcGxpY2FMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYg
KGxheWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAgICAgICAgICAgcmVwbGljYUxh
eWVyID0gJm1fbGF5ZXJzLmdldCgqbGF5ZXJVcGRhdGUucmVwbGljYUxheWVyKS0+dGV4bWFwTGF5
ZXI7CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFJlcGxpY2FMYXllcihy
ZXBsaWNhTGF5ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICAgICAgICAgIGxh
eWVyLT50ZXhtYXBMYXllci5zZXRQb3NpdGlvbihsYXllclVwZGF0ZS5wb3NpdGlvbik7CisgICAg
ICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRl
LmFuY2hvclBvaW50KTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0U2l6
ZShsYXllclVwZGF0ZS5zaXplKTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0Qm91bmRzT3JpZ2luKGxheWVyVXBkYXRlLmJvdW5kc09yaWdpbik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBy
ZXNlcnZlczNEKQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRQcmVzZXJ2
ZXMzRChsYXllclVwZGF0ZS5wcmVzZXJ2ZXMzRCk7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgICAgICAg
ICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNSZWN0KGxheWVyVXBkYXRlLmNvbnRlbnRz
UmVjdCk7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OkNvbnRlbnRzQ2xpcHBpbmdSZWN0KQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBM
YXllci5zZXRDb250ZW50c0NsaXBwaW5nUmVjdChsYXllclVwZGF0ZS5jb250ZW50c0NsaXBwaW5n
UmVjdCk7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OkNvbnRlbnRzVmlzaWJsZSkKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0Q29udGVudHNWaXNpYmxlKGxheWVyVXBkYXRlLmNvbnRlbnRzVmlzaWJsZSk7CisgICAgICAg
ICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlz
aWJpbGl0eSkKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2ZhY2VW
aXNpYmlsaXR5KGxheWVyVXBkYXRlLmJhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCisg
ICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJV
cGRhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgICAgIGF1dG8g
Yml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOworICAgICAgICAgICAg
ICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9y
ZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVN
YXBwZXIsIGltYWdlLmdldCgpLCBiaXRtYXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6ZSgp
IH0pOworICAgICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2luZ1N0
b3JlKGxheWVyLT5iYWNraW5nU3RvcmUuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUo
bnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xvcikKKyAgICAgICAg
ICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0U29saWRDb2xvcihsYXllclVwZGF0ZS5zb2xp
ZENvbG9yKTsKKyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXREZWJ1Z1Zpc3VhbHMobGF5ZXJVcGRhdGUuc2hvd0RlYnVnQm9yZGVyLCBsYXllclVwZGF0ZS5k
ZWJ1Z0JvcmRlckNvbG9yLCBsYXllclVwZGF0ZS5kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICAgICAg
ICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50
KQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBhaW50Q291bnRlcihs
YXllclVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJlcGFpbnRDb3VudCk7
CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9w
YWNpdHkpCisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE9wYWNpdHkobGF5
ZXJVcGRhdGUub3BhY2l0eSk7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFw
TGF5ZXIuc2V0VHJhbnNmb3JtKGxheWVyVXBkYXRlLnRyYW5zZm9ybSk7CisgICAgICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3Jt
KQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDaGlsZHJlblRyYW5zZm9y
bShsYXllclVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgICAgICAgICAg
bGF5ZXItPnRleG1hcExheWVyLnNldEZpbHRlcnMobGF5ZXJVcGRhdGUuZmlsdGVycyk7CisgICAg
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9w
RmlsdGVycykgeworICAgICAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRl
cnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci5y
ZXNldCgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IWxheWVyLT5iYWNrZHJvcExheWVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci0+
YmFja2Ryb3BMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckxheWVyPigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExh
eWVyLT5zZXRDb250ZW50c1Zpc2libGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBs
YXllci0+YmFja2Ryb3BMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0
RmlsdGVycyhsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnMpOworICAgICAgICAgICAgICAgICAg
ICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0U2l6ZShsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRl
cnNSZWN0LnJlY3QoKS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ry
b3BMYXllci0+c2V0UG9zaXRpb24obGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0
KCkubG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRCYWNrZHJvcExheWVyKGxheWVyLT5iYWNrZHJvcExheWVyLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJz
UmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZv
cm1MYXllcikgeworICAgICAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJhdG9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxheWVyLT5yZW1vdGVHcmFwaGljc0NvbnRleHRHTCA9ICpyZW1v
dGVHQ0dMSXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5nY2dsT3BlbkdMID0g
bGF5ZXItPnJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLT5jb250ZXh0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKGxheWVyLT5nY2dsT3Bl
bkdMLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGxheWVyLT5yZW1vdGVHcmFwaGljc0NvbnRleHRHTCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIGxheWVyLT5nY2dsT3BlbkdMID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIobnVsbHB0cik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3RlR0NH
TEl0ZXJhdG9yKys7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJlbW90ZUdDR0xJdGVyYXRv
ciA9PSByZW1vdGVHQ0dMLmVuZCgpKTsKKworICAgICAgICBmb3IgKGF1dG8gaWQgOiB1cGRhdGUu
cmVtb3ZlZExheWVycykKKyAgICAgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7CisKKyAgICAg
ICAgYXV0byByb290TGF5ZXIgPSAmbV9sYXllcnMuZ2V0KHVwZGF0ZS5yb290TGF5ZXIpLT50ZXht
YXBMYXllcjsKKyAgICAgICAgcm9vdExheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseShN
b25vdG9uaWNUaW1lOjpub3coKSk7CisKKyAgICAgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZXhw
YW5kZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgZ2xWaWV3cG9ydCgwLCAw
LCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkpOworCisgICAgICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgICAgICByb290TGF5ZXItPnBhaW50
KCptX3RleHR1cmVNYXBwZXIpOworICAgICAgICAvLyBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5k
RGlzcGxheSgqbV90ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOworCisgICAgICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKKworICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXNdIHsKKyAgICAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRVcGRh
dGUoKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3Qu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEzMDE3ZjM0MjA3NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9S
ZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdMQ29udGV4dDsKK2NsYXNzIFRleHR1cmVNYXBw
ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBSZW1vdGVXQ0xh
eWVyVHJlZUhvc3QgOgorICAgIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZW1vdGVXQ0xh
eWVyVHJlZUhvc3Q+CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBw
cml2YXRlIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRyZWVIb3N0KTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlV0NMYXllclRyZWVIb3N0PiBjcmVhdGUoR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciwg
dWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0KCk7CisK
KyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVX
Q0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXll
clRyZWVIb3N0SWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKworICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBt
X2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBt
X2lkZW50aWZpZXI7CisKKyAgICBzdHJ1Y3QgTGF5ZXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXI+PiBMYXllck1hcDsKKyAgICBMYXllck1hcCBt
X2xheWVyczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29u
dGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0
dXJlTWFwcGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI1MTZmZGE0MTkx
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFVTRShHUkFQSElD
U19MQVlFUl9XQykKKworbWVzc2FnZXMgLT4gUmVtb3RlV0NMYXllclRyZWVIb3N0IE5vdFJlZkNv
dW50ZWQgeworICAgIFVwZGF0ZShzdHJ1Y3QgV2ViS2l0OjpXQ1VwYXRlSW5mbyB1cGRhdGVJbmZv
KQorfQorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNwcAppbmRleCBmMDFlNjM5
ZDlkNzguLjI3MjM0Y2JmYjVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTMwLDE0ICszMCwzMSBAQAogCiAjaW5jbHVk
ZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4uaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzLmgiCisjaW5j
bHVkZSA8T2JqYmFzZS5oPgorI2luY2x1ZGUgPHd0Zi93aW4vU29mdExpbmtpbmcuaD4KKworU09G
VF9MSU5LX0xJQlJBUlkodXNlcjMyKTsKK1NPRlRfTElOS19PUFRJT05BTCh1c2VyMzIsIFNldFBy
b2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0LCBCT09MLCBTVERBUElDQUxMVFlQRSwgKERQSV9BV0FS
RU5FU1NfQ09OVEVYVCkpOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BVUHJvY2Vz
c01haW5XaW4gZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzTWFpbkJhc2VOb1NpbmdsZXRv
bjxHUFVQcm9jZXNzPiB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0
UHRyKCkpCisgICAgICAgICAgICBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKERQ
SV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJfTU9OSVRPUl9BV0FSRV9WMik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiB9OwogCiBpbnQgR1BVUHJvY2Vzc01haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
eworICAgIC8vIGZvciBEaXJlY3RYCisgICAgSFJFU1VMVCBociA9IDo6Q29Jbml0aWFsaXplRXgo
bnVsbHB0ciwgQ09JTklUX01VTFRJVEhSRUFERUQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwogICAgIHJldHVybiBBdXhpbGlhcnlQcm9jZXNzTWFpbjxHUFVQcm9jZXNzTWFp
bldpbj4oYXJnYywgYXJndik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDAxNTY1
ZDU1MDY5Ny4uMjQxMjdmZDM0NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExLDYg
KzExLDggQEAgYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQogbGlzdChBUFBFTkQg
V2ViS2l0X1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMV2luLmNwcAogCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3QuY3BwCisKICAgICBHUFVQcm9jZXNzL21lZGlhL3dpbi9SZW1vdGVNZWRpYVBsYXll
clByb3h5V2luLmNwcAogCiAgICAgR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3Bw
CkBAIC02OSw2ICs3MSw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvd2luL1dlYnNpdGVEYXRhU3RvcmVXaW4uY3BwCiAKKyAgICBVSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcAorCiAgICAgVUlQcm9jZXNzL3dpbi9QYWdl
Q2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4u
Y3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCkBAIC03Niw2ICs4MCw4
IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9j
ZXNzUG9vbFdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCiAKKyAgICBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKwog
ICAgIFdlYlByb2Nlc3MvR1BVL21lZGlhL3dpbi9WaWRlb0xheWVyUmVtb3RlV2luLmNwcAogCiAg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCkBA
IC05NSw2ICsxMDEsMTAgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3BwCiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXll
cldDLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKKwog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nl
c3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAtMTAyLDYgKzExMiw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVD
VE9SSUVTCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vzcy9ncmFwaGljcy93YyIKICAgICAi
JHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9jbGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L1Bs
YXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCkBA
IC0xMTksMTYgKzEzMCwyNSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgogICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2Mi
CiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3djIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93aW4iCiAgICAgIiR7V0VCS0lU
X0RJUn0vd2luIgogKQogCitsaXN0KEFQUEVORCBXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKKyAg
ICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdAorCisgICAgV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkKKykKKwog
c2V0KFdlYktpdENvbW1vbkluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVD
VE9SSUVTfSkKIHNldChXZWJLaXRDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJL
aXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQppbmRleCA0MWM3NmJkYjhkYTcuLjc2ZDFjNDE0Y2E3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0zNTcsNiArMzU3LDcgQEAg
ZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dl
YktpdDo6VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlRy
YW5zYWN0aW9uSUQnLAogICAgICAgICAnV2ViS2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVu
dGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpXZWJVUkxTY2hlbWVIYW5kbGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlhSRGV2
aWNlSWRlbnRpZmllcicsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9EcmF3aW5n
QXJlYUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCmluZGV4
IGUxNTBjMzExNTRiMy4uZTZkMmVmMTVkZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9EcmF3aW5nQXJlYUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9EcmF3aW5n
QXJlYUluZm8uaApAQCAtMzcsNyArMzcsOCBAQCBlbnVtIERyYXdpbmdBcmVhVHlwZSB7CiAjZW5k
aWYKICAgICBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUsCiAjZWxpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLSAgICBEcmF3aW5nQXJlYVR5
cGVDb29yZGluYXRlZEdyYXBoaWNzCisgICAgRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWRHcmFw
aGljcywKKyAgICBEcmF3aW5nQXJlYVR5cGVXQwogI2VuZGlmCiB9OwogICAgIApAQCAtNjMsNiAr
NjQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYktpdDo6RHJhd2luZ0FyZWFU
eXBlPiB7CiAgICAgICAgICwgV2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU6OkRyYXdpbmdBcmVhVHlw
ZVJlbW90ZUxheWVyVHJlZQogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0Uo
VEVYVFVSRV9NQVBQRVIpCiAgICAgICAgICwgV2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU6OkRyYXdp
bmdBcmVhVHlwZUNvb3JkaW5hdGVkR3JhcGhpY3MKKyAgICAgICAgLCBXZWJLaXQ6OkRyYXdpbmdB
cmVhVHlwZTo6RHJhd2luZ0FyZWFUeXBlV0MKICNlbmRpZgogICAgID47CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41OTA4ZTQzNTJjODgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3Bw
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlXQy5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitEcmF3aW5nQXJlYVByb3h5
V0M6OkRyYXdpbmdBcmVhUHJveHlXQyhXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSwgV2ViUHJv
Y2Vzc1Byb3h5JiBwcm9jZXNzKQorICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5
cGVXQywgd2ViUGFnZVByb3h5LCBwcm9jZXNzKQoreworfQorCit2b2lkIERyYXdpbmdBcmVhUHJv
eHlXQzo6c2l6ZURpZENoYW5nZSgpCit7CisgICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6
OlVwZGF0ZUdlb21ldHJ5KG1fc2l6ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43YTZlZWIwZjgyNDIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0Mu
aApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
RHJhd2luZ0FyZWFQcm94eVdDIGZpbmFsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgeworcHVi
bGljOgorICAgIERyYXdpbmdBcmVhUHJveHlXQyhXZWJQYWdlUHJveHkmLCBXZWJQcm9jZXNzUHJv
eHkmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFn
ZUNsaWVudEltcGwuY3BwCmluZGV4IGVlY2E4NGI0N2E2NC4uYjg3NTRjZTY5NDlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5V0MuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5V2luLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKQEAgLTQ3
LDYgKzQ4LDggQEAgUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdlYlZpZXcmIHZpZXcp
CiAvLyBQYWdlQ2xpZW50J3MgcHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucwogc3RkOjp1bmlxdWVfcHRy
PERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKKyAgICBpZiAobV92aWV3LnBhZ2UoKS0+cHJl
ZmVyZW5jZXMoKS51c2VHUFVQcm9jZXNzRm9yV2ViR0xFbmFibGVkKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPERyYXdpbmdBcmVhUHJveHlXQz4oKm1fdmlldy5wYWdlKCksIHByb2Nlc3Mp
OwogICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBo
aWNzPigqbV92aWV3LnBhZ2UoKSwgcHJvY2Vzcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHkuY3BwCmluZGV4IGMwYmFjMzhlZWMyZS4uN2EwMTFjMzRiNDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKQEAgLTQwLDYgKzQw
LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBD
aGFpbi5oPgogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSA8
V2ViQ29yZS9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjIsNiArNjYsOSBAQCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KEdQVVBy
b2Nlc3NDb25uZWN0aW9uJgogICAgIC8vIFRPRE86IFdlIG11c3Qgd2FpdCB1bnRpbCBpbml0aWFs
aXplZCwgYmVjYXVzZSBhdCB0aGUgbW9tZW50IHdlIGNhbm5vdCByZWNlaXZlIElQQyBtZXNzYWdl
cwogICAgIC8vIGR1cmluZyB3YWl0IHdoaWxlIGluIHN5bmNocm9ub3VzIHN0cmVhbSBzZW5kLiBT
aG91bGQgYmUgZml4ZWQgYXMgcGFydCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3MjExLgogICAgIHdhaXRVbnRpbEluaXRpYWxpemVkKCk7CisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorICAgIHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wqPihw
bGF0Zm9ybUxheWVyKCkpLT5zZXRHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIobV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIudG9VSW50NjQoKSk7CisjZW5kaWYKIH0KIAogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRjN2E3NDViNTNiZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgor
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlJiBwYWdlLCBDbGllbnQmIGNs
aWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQor
CitSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6flJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
KCkKK3sKKyAgICBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7Cit9CisKK0lQQzo6Q29u
bmVjdGlvbiogUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJmNvbnN0X2Nhc3Q8UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHkmPigqdGhpcykuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7Cit9CisKK0dQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAgIGlmICghbV9ncHVQcm9jZXNz
Q29ubmVjdGlvbikgeworICAgICAgICBhdXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgICAg
IGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CisgICAgICAgIGdwdVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
d2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCksICp0aGlzKTsKKyAgICAgICAg
Z3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoCisgICAgICAgICAgICBNZXNz
YWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlV0NMYXllclRyZWVIb3N0KHdj
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKSwgbV9wYWdlLm5hdGl2ZVdpbmRvd0hhbmRsZSgpKSwK
KyAgICAgICAgICAgIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbiA9IG1h
a2VXZWFrUHRyKGdwdVByb2Nlc3NDb25uZWN0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuICptX2dw
dVByb2Nlc3NDb25uZWN0aW9uOworfQorCit2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoYXV0byBncHVQcm9j
ZXNzQ29ubmVjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2UobV9ncHVQcm9jZXNzQ29ubmVjdGlvbiwgbnVs
bHB0cikpIHsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPnJlbW92ZUNsaWVudCgqdGhp
cyk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKS50b1VJ
bnQ2NCgpKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5k
KE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlV0NMYXllclRyZWVI
b3N0KHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKSksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlz
cGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xv
c2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIHByZXZpb3VzQ29ubmVjdGlvbikKK3sKKyAgICBwcmV2
aW91c0Nvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX2dwdVByb2Nlc3NDb25u
ZWN0aW9uLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHdj
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKKyAgICBtX2dwdVByb2Nlc3ND
b25uZWN0aW9uID0gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
d2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZUluZm8pCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjpVcGRhdGUodXBkYXRl
SW5mbykpOworfQorCit2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRVcGRhdGUo
KQoreworICAgIG1fY2xpZW50LmRpZFVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLmJkYjc0OTMxYjQyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaApAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNs
aWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkpOworcHVibGljOgorICAgIGNsYXNzIENs
aWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCkgPSAw
OworICAgIH07CisKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlJiwgQ2xp
ZW50Jik7CisgICAgflJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KCk7CisKKyAgICB2b2lkIHVw
ZGF0ZShXQ1VwYXRlSW5mbyYmKTsKKworICAgIHZvaWQgZGlkVXBkYXRlKCk7CisKK3ByaXZhdGU6
CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV93Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyOyB9OworICAgIEdQ
VVByb2Nlc3NDb25uZWN0aW9uJiBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIHZv
aWQgZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCgpOworCisgICAgLy8gR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShH
UFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFsOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgV2Vha1B0cjxHUFVQcm9jZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlv
bjsKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1fd2NMYXllclRyZWVIb3N0SWRlbnRp
ZmllciB7IFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBXZWJQ
YWdlJiBtX3BhZ2U7CisgICAgQ2xpZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZjhhZjc3YTMxMTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5IE5vdFJlZkNv
dW50ZWQgeworICAgIERpZFVwZGF0ZSgpCit9CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGRiYTA1ZTE1NWY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8d3RmL09iamVj
dElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV0NMYXllclRyZWVI
b3N0SWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciA9
IE9iamVjdElkZW50aWZpZXI8V0NMYXllclRyZWVIb3N0SWRlbnRpZmllclR5cGU+OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRl
eCBjZGJhNWFlNjU4ZGUuLjVhYTk3Y2ZhZThiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgiCiAjZWxpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJEcmF3aW5nQXJl
YUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Nyw2ICs1OCw4IEBAIHN0ZDo6dW5pcXVlX3B0
cjxEcmF3aW5nQXJlYT4gRHJhd2luZ0FyZWE6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlLCBjb25z
dCBXZWJQYWdlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJF
X01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVkR3JhcGhpY3M6CiAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcz4o
d2ViUGFnZSwgcGFyYW1ldGVycyk7CisgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVXQzoKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFXQz4od2ViUGFnZSwgcGFyYW1ldGVycyk7
CiAjZW5kaWYKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oCmluZGV4IGJhM2VkODQwYjM0MS4uYThhNmJjNTI2YjZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTEzNiw2ICsx
MzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgYm9vbCBmbHVzaFN5bmNocm9ub3VzbHksIGNvbnN0
IFdURjo6TWFjaFNlbmRSaWdodCYgZmVuY2VQb3J0KSB7IH0KICNlbmRpZgogCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShXZWJDb3Jl
OjpJbnRTaXplIHZpZXdTaXplKSB7IH07CisjZW5kaWYKKwogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgfHwgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQogICAgIHZpcnR1
YWwgdm9pZCBsYXllckhvc3REaWRGbHVzaExheWVycygpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2Vz
LmluCmluZGV4IDlkNWY2ZGNhNmUzOC4uYzU4MGIwOWFiMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpA
QCAtNDAsNiArNDAsMTAgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7
CiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgVXBkYXRlR2Vv
bWV0cnkoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0o
Q09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBBZGp1c3RUcmFuc2llbnRab29tKGRvdWJsZSBz
Y2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgQ29tbWl0VHJhbnNpZW50Wm9v
bShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDgxNTc4Mzc4ZTg3YS4u
YTRiY2FjZTljZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwCkBAIC00OTYsNyArNDk2LDcgQEAgU3RyaW5nIFdlYkZyYW1lOjpsYXllclRyZWVB
c1RleHQoKSBjb25zdAogICAgIGlmICghbV9jb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAiIjsK
IAotICAgIHJldHVybiBtX2NvcmVGcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3Io
KS5sYXllclRyZWVBc1RleHQoKTsKKyAgICByZXR1cm4gbV9jb3JlRnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpLT5jb21wb3NpdG9yKCkubGF5ZXJUcmVlQXNUZXh0KE9wdGlvblNldDxMYXllclRyZWVB
c1RleHRPcHRpb25zPjo6ZnJvbVJhdygoMSA8PCAxMykgLSAxKSk7CiB9CiAKIHVuc2lnbmVkIFdl
YkZyYW1lOjpwZW5kaW5nVW5sb2FkQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUyZWMwNjY0MTQ2ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3Bw
CkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0Mu
aCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIlVu
YWNjZWxlcmF0ZWRTaGFyZWFibGVDb25jcmV0ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiV0NM
YXllckZhY3RvcnkuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKFdlYlBhZ2Um
IHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisg
ICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGVXQywgcGFyYW1ldGVycy5kcmF3aW5nQXJl
YUlkZW50aWZpZXIsIHdlYlBhZ2UpCisgICAgLCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQor
ICAgICwgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5
ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlLCAqdGhpcykpCisgICAgLCBtX2NvbnRleHQobWFrZVVu
aXF1ZTxXQ0xheWVyRmFjdG9yeT4oKnRoaXMpKQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMtPm1fcm9vdExheWVyQ2xp
ZW50KSkKKyAgICAsIG1fdXBkYXRlUmVuZGVyaW5nVGltZXIoKnRoaXMsICZEcmF3aW5nQXJlYVdD
Ojp1cGRhdGVSZW5kZXJpbmcpCisgICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
Q29tbWl0UXVldWUiX3MpKQoreworICAgIHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5z
ZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAgIG1fcm9vdExheWVyLT5zZXROYW1l
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJkcmF3aW5nIGFyZWEgcm9vdCIpKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRDb250
ZW50c09wYXF1ZSh0cnVlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6
ZSgpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK0RyYXdpbmdB
cmVhV0M6On5EcmF3aW5nQXJlYVdDKCkKK3sKKyAgICB3aGlsZSAoYXV0byBsYXllciA9IG1fbGl2
ZUdyYXBoaWNzTGF5ZXJzLnJlbW92ZUhlYWQoKSkKKyAgICAgICAgbGF5ZXItPmNsZWFyQ29vcmRp
bmF0b3IoKTsKK30KKworV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIERyYXdpbmdBcmVh
V0M6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgp
OworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnVwZGF0ZVJvb3RMYXllcnMoKQoreworICAgIFZl
Y3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOworICAgIGlmIChtX2NvbnRlbnRMYXll
cikgeworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm1fY29udGVudExheWVyKTsKKyAgICAgICAg
aWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQo
Km1fdmlld092ZXJsYXlSb290TGF5ZXIpOworICAgIH0KKworICAgIG1fcm9vdExheWVyLT5zZXRD
aGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgp
OworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBo
aWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsK
KyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6YXR0YWNo
Vmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQor
eworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSBsYXllcjsKKyAgICB1cGRhdGVSb290TGF5
ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3pl
bihib29sIGlzRnJvemVuKQoreworICAgIGlmIChtX2lzUmVuZGVyaW5nU3VzcGVuZGVkID09IGlz
RnJvemVuKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkID0g
aXNGcm96ZW47CisKKyAgICBpZiAoIW1faXNSZW5kZXJpbmdTdXNwZW5kZWQgJiYgbV9oYXNEZWZl
cnJlZFJlbmRlcmluZ1VwZGF0ZSkgeworICAgICAgICBtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBk
YXRlID0gZmFsc2U7CisgICAgICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAgICB9Cit9
CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlR2VvbWV0cnkoV2ViQ29yZTo6SW50U2l6ZSB2
aWV3U2l6ZSkKK3sKKyAgICBtX3dlYlBhZ2Uuc2V0U2l6ZSh2aWV3U2l6ZSk7CisgICAgbV9yb290
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNpemUoKSk7CisKKyAgICB0cmlnZ2VyUmVuZGVyaW5n
VXBkYXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sK
KyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7Cisg
ICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICB0cmlnZ2Vy
UmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2Nyb2xsKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbERlbHRhKQoreworICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Ny
b2xsUmVjdCk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworfQorCit2b2lkIERyYXdp
bmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKQoreworICAgIGlmIChtX2lzUmVuZGVy
aW5nU3VzcGVuZGVkIHx8IG1fd2FpdERpZFVwZGF0ZSkgeworICAgICAgICBtX2hhc0RlZmVycmVk
UmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX3VwZGF0ZVJlbmRlcmluZ1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3VwZGF0ZVJlbmRlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCitzdGF0aWMg
dm9pZCBmbHVzaExheWVySW1hZ2VCdWZmZXJzKFdDVXBhdGVJbmZvJiBpbmZvKQoreworICAgIGZv
ciAoYXV0byYgbGF5ZXJJbmZvIDogaW5mby5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGlmIChs
YXllckluZm8uY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBsYXllckluZm8uYmFja2luZ1N0b3JlLmltYWdlQnVmZmVy
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZs
dXNoZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgZmx1c2hlci0+Zmx1c2goKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVS
ZW5kZXJpbmcoKQoreworICAgIGlmIChtX2lzUmVuZGVyaW5nU3VzcGVuZGVkKSB7CisgICAgICAg
IG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgPSB0cnVlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVlbnRyYW50LCBlLmcuIGEgckFG
IGNhbGxiYWNrIG1heSBmb3JjZSByZXBhaW50LgorICAgIGlmIChtX2luVXBkYXRlUmVuZGVyaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fd2FpdERpZFVwZGF0ZSk7CisgICAg
bV93YWl0RGlkVXBkYXRlID0gdHJ1ZTsKKworICAgIFNldEZvclNjb3BlPGJvb2w+IGNoYW5nZSht
X2luVXBkYXRlUmVuZGVyaW5nLCB0cnVlKTsKKyAgICBtX3dlYlBhZ2UudXBkYXRlUmVuZGVyaW5n
KCk7CisgICAgbV93ZWJQYWdlLmZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7CisKKyAg
ICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
CisgICAgT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdzOworICAg
IG1fd2ViUGFnZS5maW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShmbGFncyk7CisKKyAgICAvLyBCZWNh
dXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQg
dG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBp
dCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92
aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHsgfSk7CisKKyAgICBt
X3VwZGF0ZUluZm8ucm9vdExheWVyID0gbV9yb290TGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisK
KyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRjaChbJiwgdXBkYXRlSW5mbyA9IHN0ZDo6ZXhjaGFu
Z2UobV91cGRhdGVJbmZvLCB7IH0pXSgpIG11dGFibGUgeworICAgICAgICBmbHVzaExheWVySW1h
Z2VCdWZmZXJzKHVwZGF0ZUluZm8pOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
WyYsIHVwZGF0ZUluZm8gPSBXVEZNb3ZlKHVwZGF0ZUluZm8pXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlKFdURk1vdmUodXBkYXRl
SW5mbykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpn
cmFwaGljc0xheWVyQWRkZWQoR3JhcGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICBtX2xpdmVH
cmFwaGljc0xheWVycy5hcHBlbmQoJmxheWVyKTsKKyAgICBtX3VwZGF0ZUluZm8uYWRkZWRMYXll
cnMuYXBwZW5kKGxheWVyLnByaW1hcnlMYXllcklEKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVh
V0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNzTGF5ZXJXQyYgbGF5ZXIpCit7CisgICAg
bV9saXZlR3JhcGhpY3NMYXllcnMucmVtb3ZlKCZsYXllcik7CisgICAgbV91cGRhdGVJbmZvLnJl
bW92ZWRMYXllcnMuYXBwZW5kKGxheWVyLnByaW1hcnlMYXllcklEKCkpOworfQorCit2b2lkIERy
YXdpbmdBcmVhV0M6OmNvbW1pdExheWVyVXBhdGVJbmZvKFdDTGF5ZXJVcGF0ZUluZm8mJiBpbmZv
KQoreworICAgIG1fdXBkYXRlSW5mby5jaGFuZ2VkTGF5ZXJzLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBEcmF3aW5nQXJlYVdDOjpjcmVh
dGVJbWFnZUJ1ZmZlckZvckxheWVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKQoreworICAgIGlm
IChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRVc2VSZW1vdGVSZW5kZXJpbmdGb3IoUmVu
ZGVyaW5nUHVycG9zZTo6RE9NKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS5lbnN1cmVSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICByZXR1cm4gVW5hY2Nl
bGVyYXRlZFNoYXJlYWJsZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxLCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBu
dWxscHRyKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpkaWRVcGRhdGUoKQoreworICAgIG1f
d2FpdERpZFVwZGF0ZSA9IGZhbHNlOworICAgIGlmIChtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBk
YXRlKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgPSBmYWxzZTsKKyAg
ICAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30KKworRHJhd2luZ0FyZWFX
Qzo6Um9vdExheWVyQ2xpZW50OjpSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYgd2ViUGFnZSkKKyAg
ICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQoreworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OlJvb3RM
YXllckNsaWVudDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBHcmFwaGljc0xh
eWVyUGFpbnRCZWhhdmlvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmNs
aXAocmVjdFRvUGFpbnQpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52
aWV3KCktPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdFRvUGFpbnQpKTsKKyAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworZmxvYXQgRHJhd2luZ0FyZWFXQzo6Um9vdExheWVy
Q2xpZW50OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFn
ZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworfQorCisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJh
d2luZ0FyZWFXQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWI4
N2QzODgyY2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0xheWVyRmFj
dG9yeTsKKworY2xhc3MgRHJhd2luZ0FyZWFXQyBmaW5hbAorICAgIDogcHVibGljIERyYXdpbmdB
cmVhCisgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllcldDOjpDb29yZGluYXRvcgorICAgICwgcHVi
bGljIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpDbGllbnQgeworcHVibGljOgorICAgIERy
YXdpbmdBcmVhV0MoV2ViUGFnZSYsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICB+RHJhd2luZ0FyZWFXQygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZm9yY2VSZXBhaW50
QXN5bmMoV2ViUGFnZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGUgeyB9
CisgICAgdm9pZCB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
aWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYp
IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
b3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9pc1JlbmRlcmluZ1N1c3BlbmRlZDsgfQorICAgIHZvaWQgdXBkYXRlR2Vv
bWV0cnkoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkgb3ZlcnJpZGU7CisKKyAgICAvLyBHcmFw
aGljc0xheWVyV0M6OkNvb3JkaW5hdG9yCisgICAgdm9pZCBncmFwaGljc0xheWVyQWRkZWQoR3Jh
cGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CisgICAgdm9pZCBncmFwaGljc0xheWVyUmVtb3ZlZChH
cmFwaGljc0xheWVyV0MmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbW1pdExheWVyVXBhdGVJbmZv
KFdDTGF5ZXJVcGF0ZUluZm8mJikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlckZvckxheWVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkgb3Zl
cnJpZGU7CisKKyAgICAvLyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50CisgICAg
dm9pZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nKCk7
CisKKyAgICBjbGFzcyBSb290TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFn
ZSYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
QmVoYXZpb3IpIG92ZXJyaWRlOworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0IG92ZXJyaWRlOworICAgICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgfTsKKworICAg
IFJvb3RMYXllckNsaWVudCBtX3Jvb3RMYXllckNsaWVudDsKKworICAgIHZvaWQgc2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5PiBtX3JlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXQ0xheWVyRmFjdG9yeT4gbV9jb250ZXh0
OworICAgIERvdWJseUxpbmtlZExpc3Q8R3JhcGhpY3NMYXllcldDPiBtX2xpdmVHcmFwaGljc0xh
eWVyczsKKworICAgIFdlYkNvcmU6OlRpbWVyIG1fdXBkYXRlUmVuZGVyaW5nVGltZXI7CisgICAg
Ym9vbCBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzRGVm
ZXJyZWRSZW5kZXJpbmdVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pblVwZGF0ZVJlbmRl
cmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dhaXREaWRVcGRhdGUgeyBmYWxzZSB9OworICAg
IFdDVXBhdGVJbmZvIG1fdXBkYXRlSW5mbzsKKworICAgIFJlZjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9j
b250ZW50TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092
ZXJsYXlSb290TGF5ZXI7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV9jb21taXRRdWV1ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi4zOWQ3OGNiZTQzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0w
LDAgKzEsNDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvV0NQbGF0Zm9ybUxheWVyR0NHTC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcmFwaGljc0xheWVyV0M6Okdy
YXBoaWNzTGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50
LCBDb29yZGluYXRvciYgY29vcmRpbmF0b3IpCisgICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlw
ZSwgY2xpZW50KQorICAgICwgbV9jb29yZGluYXRvcigmY29vcmRpbmF0b3IpCit7CisgICAgbV9j
b29yZGluYXRvci0+Z3JhcGhpY3NMYXllckFkZGVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXll
cldDOjp+R3JhcGhpY3NMYXllcldDKCkKK3sKKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKKyAgICBp
ZiAobV9jb29yZGluYXRvcikKKyAgICAgICAgbV9jb29yZGluYXRvci0+Z3JhcGhpY3NMYXllclJl
bW92ZWQoKnRoaXMpOworfQorCitHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhp
Y3NMYXllcldDOjpnZW5lcmF0ZUxheWVySUQoKQoreworICAgIHN0YXRpYyBHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQgaWQgPSAxOworICAgIHJldHVybiBpZCsrOworfQorCitHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhpY3NMYXllcldDOjpwcmltYXJ5TGF5ZXJJRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJJRDsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpC
YWNraW5nU3RvcmUpOworICAgIGFkZFJlcGFpbnRSZWN0KHsgeyB9LCBtX3NpemUgfSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiByZWN0LCBTaG91bGRDbGlwVG9MYXllcikKK3sKKyAgICBpZiAoIWRyYXdz
Q29udGVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7CisgICAgYWRkUmVwYWludFJlY3QocmVjdCk7
Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBo
aWNzTGF5ZXI+PiYmIGNoaWxkcmVuKQoreworICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgIGlmIChjaGls
ZHJlbkNoYW5nZWQpCisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hh
bmdlOjpDaGlsZHJlbik7CisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyV0M6OmFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIp
Cit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZExheWVyKSk7Cisg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXll
cj4mJiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBdEluZGV4KFdURk1vdmUoY2hpbGRMYXllciksIGluZGV4KTsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGlsZExheWVyLCBH
cmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVs
b3coV1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OmFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXllciwgR3JhcGhp
Y3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKFdU
Rk1vdmUoY2hpbGRMYXllciksIHNpYmxpbmcpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpy
ZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGljc0xheWVyPiYm
IG5ld0NoaWxkKQoreworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hp
bGQsIFdURk1vdmUobmV3Q2hpbGQpKSkgeworICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6cmVtb3ZlRnJv
bVBhcmVudCgpCit7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFw
aGljc0xheWVyV0MqPihtX3BhcmVudCktPm5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpDaGlsZHJlbik7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza0xheWVyKFJlZlB0cjxHcmFwaGlj
c0xheWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX21hc2tMYXllcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKFdURk1vdmUobGF5
ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6TWFza0xh
eWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0ZWRMYXllcihHcmFw
aGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbV9yZXBsaWNhdGVkTGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRMYXll
cihsYXllcik7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlJl
cGxpY2FMYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRSZXBsaWNhdGVkQnlM
YXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4mJiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0g
bV9yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlm
IChwb2ludCA9PSBtX3Bvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit7CisgICAgaWYgKHBvaW50ID09
IG1fYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEFuY2hvclBvaW50KHBvaW50KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHNpemUgPT0gbV9zaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2lu
KQoreworICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJvdW5kc09yaWdpbihvcmlnaW4pOworICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHQpCit7CisgICAgaWYgKHQgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQor
eworICAgIGlmICh0ID09IGNoaWxkcmVuVHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
cldDOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1h
c2tzVG9Cb3VuZHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1h
c2tzVG9Cb3VuZHModmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpNYXNrc1RvQm91bmRzKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE9w
YWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCh2YWx1ZSk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c0NsaXBwaW5nUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNDbGlwcGluZ1JlY3Qo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQ2xpcHBp
bmdSZWN0KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVu
dCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50
KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFj
a2luZ1N0b3JlKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVmlzaWJs
ZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0FyZVZpc2libGUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSh2
YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRl
bnRzVmlzaWJsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZmFjZVZpc2li
aWxpdHkoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2li
aWxpdHkodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNrZmFjZVZpc2liaWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29u
dGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChjb2xvciA9
PSBtX3NvbGlkQ29sb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc29saWRDb2xvciA9IGNv
bG9yOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpTb2xpZENv
bG9yKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxh
eWVyKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIENvbnRlbnRzTGF5ZXJQdXJwb3NlKQor
eworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fcGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpOworfQorCitib29s
IEdyYXBoaWNzTGF5ZXJXQzo6dXNlc0NvbnRlbnRzTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BsYXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaG93RGVi
dWdCb3JkZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpID09
IHNob3cpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1
Z0JvcmRlcihzaG93KTsKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgd2lkdGgpCit7CisgICAgbV9kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7CisgICAgbV9kZWJ1
Z0JvcmRlcldpZHRoID0gd2lkdGg7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5
ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRT
aG93UmVwYWludENvdW50ZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdSZXBhaW50
Q291bnRlcigpID09IHNob3cpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFNob3dSZXBhaW50Q291bnRlcihzaG93KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KTsKK30KKworc3RhdGljIGJvb2wgZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAg
IGlmICghZmlsdGVycy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAo
Y29uc3QgYXV0byYgZmlsdGVyT3BlcmF0aW9uIDogZmlsdGVycy5vcGVyYXRpb25zKCkpIHsKKyAg
ICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IGZp
bHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OmZp
bHRlcnMoKSA9PSBmaWx0ZXJzKQorICAgICAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsK
KworICAgIGlmIChjYW5Db21wb3NpdGVGaWx0ZXJzKSB7CisgICAgICAgIGlmICghR3JhcGhpY3NM
YXllcjo6c2V0RmlsdGVycyhmaWx0ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9IGVsc2UgaWYgKEdyYXBoaWNzTGF5ZXI6OmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAgIGNs
ZWFyRmlsdGVycygpOworCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFu
Z2U6OkZpbHRlcnMpOworICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworfQorCitib29s
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCit7CisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVyc0Nh
bkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAgICBpZiAobV9iYWNrZHJvcEZpbHRlcnMgPT0gZmls
dGVycykKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CisKKyAgICBpZiAoY2Fu
Q29tcG9zaXRlRmlsdGVycykKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2Ryb3BGaWx0
ZXJzKGZpbHRlcnMpOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJCYWNrZHJvcEZpbHRlcnMoKTsK
KworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZp
bHRlcnMpOworCisgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGJhY2tkcm9wRmlsdGVyc1JlY3QpCit7CisgICAgaWYgKG1fYmFja2Ryb3BGaWx0ZXJzUmVj
dCA9PSBiYWNrZHJvcEZpbHRlcnNSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGJhY2tkcm9wRmlsdGVyc1JlY3QpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9w
dGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFncywgU2NoZWR1bGVGbHVzaE9yTm90IHNjaGVkdWxl
Rmx1c2gpCit7CisgICAgaWYgKGJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGJvb2wgaGFkVW5jb21taXR0ZWRDaGFuZ2VzID0gISFtX3VuY29tbWl0dGVkQ2hhbmdlczsK
KworICAgIG1fdW5jb21taXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7CisKKyAgICBpZiAoc2NoZWR1
bGVGbHVzaCA9PSBTY2hlZHVsZUZsdXNoKSB7CisgICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9ICFo
YWRVbmNvbW1pdHRlZENoYW5nZXM7CisgICAgICAgIGlmIChuZWVkc0ZsdXNoKQorICAgICAgICAg
ICAgY2xpZW50KCkubm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIG1hc2st
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChhdXRv
KiByZXBsaWNhID0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2EtPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigp
KQorICAgICAgICBjaGlsZC0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
Cit7CisgICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV0NMYXllclVwYXRlSW5mbyB1cGRhdGU7CisgICAgdXBkYXRlLmlkID0gcHJpbWFyeUxheWVy
SUQoKTsKKyAgICB1cGRhdGUuY2hhbmdlcyA9IHN0ZDo6ZXhjaGFuZ2UobV91bmNvbW1pdHRlZENo
YW5nZXMsIHsgfSk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hp
bGRyZW4pIHsKKyAgICAgICAgdXBkYXRlLmNoaWxkcmVuID0gV1RGOjptYXAoY2hpbGRyZW4oKSwg
W10oYXV0byYgbGF5ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBsYXllci0+cHJpbWFyeUxheWVy
SUQoKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAg
ICAgICB1cGRhdGUubWFza0xheWVyID0gbWFza0xheWVyKCktPnByaW1hcnlMYXllcklEKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwZGF0ZS5tYXNrTGF5ZXIgPSBzdGQ6Om51bGxvcHQ7
CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FM
YXllcikgeworICAgICAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgICAgICB1cGRhdGUu
cmVwbGljYUxheWVyID0gcmVwbGljYUxheWVyKCktPnByaW1hcnlMYXllcklEKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHVwZGF0ZS5yZXBsaWNhTGF5ZXIgPSBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KSB7
CisgICAgICAgIHVwZGF0ZS5wb3NpdGlvbiA9IHBvc2l0aW9uKCk7CisgICAgICAgIHVwZGF0ZS5h
bmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CisgICAgICAgIHVwZGF0ZS5zaXplID0gc2l6ZSgp
OworICAgICAgICB1cGRhdGUuYm91bmRzT3JpZ2luID0gYm91bmRzT3JpZ2luKCk7CisgICAgfQor
ICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKQorICAg
ICAgICB1cGRhdGUucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgdXBkYXRlLmNv
bnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xpcHBpbmdSZWN0KQorICAgICAgICB1cGRhdGUuY29udGVu
dHNDbGlwcGluZ1JlY3QgPSBjb250ZW50c0NsaXBwaW5nUmVjdCgpOworICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSkKKyAgICAgICAgdXBkYXRl
LmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOworICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAgdXBk
YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIGlmICh1
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCisgICAgICAgIHVw
ZGF0ZS5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOworICAgIGlmICh1cGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICBpZiAoZHJhd3ND
b250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkgJiYgIXNpemUoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJ1ZmZl
ckZvckxheWVyKHNpemUoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSB7IHsg
fSwgc2l6ZSgpIH07CisgICAgICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhpbWFn
ZS0+Y29udGV4dCgpLCBjbGlwUmVjdCk7CisgICAgICAgICAgICBpbWFnZS0+Zmx1c2hEcmF3aW5n
Q29udGV4dEFzeW5jKCk7CisgICAgICAgICAgICB1cGRhdGUuYmFja2luZ1N0b3JlLnNldEltYWdl
QnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKworICAgICAgICAgICAgaW5jcmVtZW50UmVwYWludENv
dW50KCk7CisgICAgICAgICAgICB1cGRhdGUuY2hhbmdlcy5hZGQoV0NMYXllckNoYW5nZTo6UmVw
YWludENvdW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICB1cGRhdGUuc29saWRDb2xvciA9IG1f
c29saWRDb2xvcjsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1
Z1Zpc3VhbHMpIHsKKyAgICAgICAgdXBkYXRlLnNob3dEZWJ1Z0JvcmRlciA9IGlzU2hvd2luZ0Rl
YnVnQm9yZGVyKCk7CisgICAgICAgIHVwZGF0ZS5kZWJ1Z0JvcmRlckNvbG9yID0gbV9kZWJ1Z0Jv
cmRlckNvbG9yOworICAgICAgICB1cGRhdGUuZGVidWdCb3JkZXJXaWR0aCA9IG1fZGVidWdCb3Jk
ZXJXaWR0aDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
UmVwYWludENvdW50KSB7CisgICAgICAgIHVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIgPSBpc1No
b3dpbmdSZXBhaW50Q291bnRlcigpOworICAgICAgICB1cGRhdGUucmVwYWludENvdW50ID0gcmVw
YWludENvdW50KCk7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6Ok9wYWNpdHkpCisgICAgICAgIHVwZGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgdXBk
YXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgIHVwZGF0ZS5maWx0ZXJzID0gZmlsdGVy
cygpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmls
dGVycykgeworICAgICAgICB1cGRhdGUuYmFja2Ryb3BGaWx0ZXJzID0gYmFja2Ryb3BGaWx0ZXJz
KCk7CisgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0ID0gYmFja2Ryb3BGaWx0ZXJz
UmVjdCgpOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQ
bGF0Zm9ybUxheWVyKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCisgICAgICAgICAg
ICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8V0NQbGF0
Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPmdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyID0gMDsKKyAgICB9CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5jb21taXRMYXll
clVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNz
TGF5ZXJXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NM
YXllcldDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jOTY1ZWQ1
NzQwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9HcmFwaGljc0xheWVyV0MuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8R3Jh
cGhpY3NMYXllcldDPiB7CitwdWJsaWM6CisgICAgc3RydWN0IENvb3JkaW5hdG9yIHsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xheWVyV0MmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBncmFwaGljc0xheWVyUmVtb3ZlZChHcmFwaGljc0xheWVy
V0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRMYXllclVwYXRlSW5mbyhXQ0xh
eWVyVXBhdGVJbmZvJiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyRm9yTGF5ZXIoV2ViQ29yZTo6RmxvYXRTaXplKSA9
IDA7CisgICAgfTsKKworICAgIEdyYXBoaWNzTGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCYsIENvb3JkaW5hdG9yJik7CisgICAgfkdyYXBoaWNzTGF5
ZXJXQygpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGVhckNvb3JkaW5hdG9yKCkgeyBtX2Nvb3Jk
aW5hdG9yID0gbnVsbHB0cjsgfQorCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIHByaW1hcnlMYXllcklEKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBTaG91bGRDbGlwVG9MYXllcikgb3ZlcnJpZGU7CisK
KyAgICBib29sIHNldENoaWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYpIG92ZXJy
aWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVmPEdyYXBoaWNzTGF5ZXI+JiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KFJlZjxHcmFwaGljc0xheWVyPiYmLCBpbnQgaW5kZXgp
IG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShSZWY8R3JhcGhpY3NMYXllcj4mJiwg
R3JhcGhpY3NMYXllciogc2libGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93
KFJlZjxHcmFwaGljc0xheWVyPiYmLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsK
KyAgICBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgUmVmPEdyYXBo
aWNzTGF5ZXI+JiYgbmV3Q2hpbGQpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVu
dCgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xheWVy
PiYmKTsKKyAgICB2b2lkIHNldFJlcGxpY2F0ZWRMYXllcihHcmFwaGljc0xheWVyKik7CisgICAg
dm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAg
dm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYp
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0UHJlc2VydmVzM0QoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRz
KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRDb250ZW50c0NsaXBwaW5nUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiwgQ29u
dGVudHNMYXllclB1cnBvc2UpIG92ZXJyaWRlOworCisgICAgYm9vbCBzaG91bGREaXJlY3RseUNv
bXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHVzZXNDb250ZW50c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcihib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldERl
YnVnQm9yZGVyKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgZmxvYXQgd2lkdGgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wpIG92ZXJyaWRlOworICAgIGJvb2wg
c2V0RmlsdGVycyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBzZXRCYWNrZHJvcEZpbHRlcnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGZsdXNoQ29tcG9z
aXRpbmdTdGF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNjaGVkdWxlRmx1c2hPck5vdCA6IGJvb2wgeyBTY2hl
ZHVsZUZsdXNoLCBEb250U2NoZWR1bGVGbHVzaCB9OworICAgIHZvaWQgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiwgU2NoZWR1bGVGbHVzaE9yTm90ID0g
U2NoZWR1bGVGbHVzaCk7CisKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIGdlbmVyYXRlTGF5ZXJJRCgpOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlu
a2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPjsKKyAgICBHcmFwaGljc0xheWVyV0MqIG1fcHJl
djsKKyAgICBHcmFwaGljc0xheWVyV0MqIG1fbmV4dDsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVySUQgeyBnZW5lcmF0ZUxheWVySUQoKSB9Owor
ICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9yOworICAgIE9wdGlvblNldDxXQ0xheWVyQ2hh
bmdlPiBtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRmb3Jt
TGF5ZXIgeyBudWxscHRyIH07CisgICAgV2ViQ29yZTo6Q29sb3IgbV9zb2xpZENvbG9yOworICAg
IFdlYkNvcmU6OkNvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBtX2RlYnVnQm9y
ZGVyV2lkdGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1VuYWNjZWxlcmF0ZWRTaGFyZWFi
bGVDb25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9VbmFjY2VsZXJhdGVkU2hhcmVhYmxlQ29uY3JldGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWJlYzBlZjkxZGExCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvVW5hY2NlbGVyYXRl
ZFNoYXJlYWJsZUNvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFVuYWNjZWxlcmF0ZWRTaGFyZWFibGVDb25jcmV0ZUltYWdlQnVmZmVyIDogcHVi
bGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVy
U2hhcmVhYmxlQmFja2VuZD4geworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3RvcmUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk1ODlhMDJkZTNmZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFj
a2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPG9wdGlvbmFsPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NCYWNraW5nU3RvcmUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdDQmFja2luZ1N0b3JlKCkgeyB9CisKKyAg
ICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSB7IHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+JiYgaW1hZ2UpIHsgbV9pbWFnZUJ1ZmZlciA9IFdURk1vdmUoaW1hZ2UpOyB9CisK
KyAgICBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLmdl
dCgpOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBib29sIGhhc0ltYWdlQnVmZmVy
ID0gbV9pbWFnZUJ1ZmZlcjsKKyAgICAgICAgZW5jb2RlciA8PCBoYXNJbWFnZUJ1ZmZlcjsKKwor
ICAgICAgICBpZiAoaGFzSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0g
c3RhdGljX2Nhc3Q8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCY+KCpt
X2ltYWdlQnVmZmVyLT5lbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKS5jcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+CisgICAgc3RhdGljIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ0JhY2tpbmdTdG9y
ZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYm9vbCBoYXNJbWFnZUJ1ZmZlcjsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShoYXNJbWFnZUJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKGhhc0ltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShoYW5kbGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgV1RGOjpzd2l0Y2hPbihoYW5kbGUsCisgICAgICAgICAgICAgICAgWyZdIChTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX2Jp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xh
eWVyRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xh
eWVyRmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40
MGE4MGRjMzI0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXQ0xheWVyRmFjdG9yeTo6V0NMYXllckZhY3Rvcnko
R3JhcGhpY3NMYXllcldDOjpDb29yZGluYXRvciYgY29vcmRpbmF0b3IpCisgICAgOiBtX2Nvb3Jk
aW5hdG9yKGNvb3JkaW5hdG9yKQoreworfQorCitSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
V0NMYXllckZhY3Rvcnk6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6VHlwZSBsYXllclR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0xheWVyV0MobGF5ZXJUeXBlLCBj
bGllbnQsIG1fY29vcmRpbmF0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9y
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3Rvcnku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE0YmFiNTE3NDlmZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dD
TGF5ZXJGYWN0b3J5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdD
TGF5ZXJGYWN0b3J5IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
IHsKK3B1YmxpYzoKKyAgICBXQ0xheWVyRmFjdG9yeShHcmFwaGljc0xheWVyV0M6OkNvb3JkaW5h
dG9yJik7CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkK
KyAgICBSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikg
b3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xheWVyV0M6OkNvb3JkaW5hdG9yJiBtX2Nvb3JkaW5h
dG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjQ5NGM2ZjA1OGVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKQEAgLTAsMCArMSwz
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXQ0JhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUg
PHd0Zi9FbnVtVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBXQ0xheWVyQ2hhbmdlIDogdWludDMyX3QgeworICAg
IENoaWxkcmVuICAgICAgICAgICAgICAgID0gMSA8PCAgMCwKKyAgICBNYXNrTGF5ZXIgICAgICAg
ICAgICAgICA9IDEgPDwgIDEsCisgICAgUmVwbGljYUxheWVyICAgICAgICAgICAgPSAxIDw8ICAy
LAorICAgIEdlb21ldHJ5ICAgICAgICAgICAgICAgID0gMSA8PCAgMywKKyAgICBQcmVzZXJ2ZXMz
RCAgICAgICAgICAgICA9IDEgPDwgIDQsCisgICAgQ29udGVudHNWaXNpYmxlICAgICAgICAgPSAx
IDw8ICA1LAorICAgIEJhY2tmYWNlVmlzaWJpbGl0eSAgICAgID0gMSA8PCAgNiwKKyAgICBNYXNr
c1RvQm91bmRzICAgICAgICAgICA9IDEgPDwgIDcsCisgICAgU29saWRDb2xvciAgICAgICAgICAg
ICAgPSAxIDw8ICA4LAorICAgIERlYnVnVmlzdWFscyAgICAgICAgICAgID0gMSA8PCAgOSwKKyAg
ICBSZXBhaW50Q291bnQgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgQ29udGVudHNSZWN0ICAg
ICAgICAgICAgPSAxIDw8IDExLAorICAgIENvbnRlbnRzQ2xpcHBpbmdSZWN0ICAgID0gMSA8PCAx
MiwKKyAgICBPcGFjaXR5ICAgICAgICAgICAgICAgICA9IDEgPDwgMTMsCisgICAgQmFja2luZ1N0
b3JlICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgIFRyYW5zZm9ybSAgICAgICAgICAgICAgID0g
MSA8PCAxNSwKKyAgICBDaGlsZHJlblRyYW5zZm9ybSAgICAgICA9IDEgPDwgMTYsCisgICAgRmls
dGVycyAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAorICAgIEJhY2tkcm9wRmlsdGVycyAgICAg
ICAgID0gMSA8PCAxOCwKKyAgICBQbGF0Zm9ybUxheWVyICAgICAgICAgICA9IDEgPDwgMTksCit9
OworCitzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIGlkOworICAgIE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBjaGFu
Z2VzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+
IGNoaWxkcmVuOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEPiBtYXNrTGF5ZXI7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IHJlcGxpY2FMYXllcjsKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IHBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2lu
dDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IGJvdW5kc09yaWdpbjsKKyAgICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgYm9vbCBzaG93RGVi
dWdCb3JkZXI7CisgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXI7CisgICAgYm9vbCBjb250ZW50
c1Zpc2libGU7CisgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CisgICAgYm9vbCBwcmVzZXJ2
ZXMzRDsKKyAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOworICAgIFdlYkNvcmU6OkNvbG9y
IGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBmbG9hdCBkZWJ1Z0Jv
cmRlcldpZHRoOworICAgIGludCByZXBhaW50Q291bnQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnRlbnRzUmVjdDsKKyAgICBXQ0JhY2tpbmdTdG9yZSBiYWNraW5nU3RvcmU7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgIFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMgZmlsdGVyczsKKyAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9w
RmlsdGVyczsKKyAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1Jl
Y3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCBjb250ZW50c0NsaXBwaW5nUmVjdDsK
KyAgICB1aW50NjRfdCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IGlkOworICAgICAgICBlbmNvZGVyIDw8IGNoYW5n
ZXM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6Ok1hc2tMYXllcikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgbWFza0xheWVyOwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgcmVwbGljYUxheWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KQorICAgICAgICAgICAgZW5jb2RlciA8PCBwb3NpdGlvbiA8
PCBhbmNob3JQb2ludCA8PCBzaXplIDw8IGJvdW5kc09yaWdpbjsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
cHJlc2VydmVzM0Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVu
dHNWaXNpYmxlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1Zpc2libGU7CisgICAg
ICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQorICAg
ICAgICAgICAgZW5jb2RlciA8PCBiYWNrZmFjZVZpc2liaWxpdHk7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgbWFza3NUb0JvdW5kczsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpT
b2xpZENvbG9yKQorICAgICAgICAgICAgZW5jb2RlciA8PCBzb2xpZENvbG9yOworICAgICAgICBp
ZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc2hvd0RlYnVnQm9yZGVyIDw8IGRlYnVnQm9yZGVyQ29sb3IgPDwgZGVidWdCb3Jk
ZXJXaWR0aDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291
bnQpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNob3dSZXBhaW50Q291bnRlciA8PCByZXBhaW50
Q291bnQ7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0
KQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1JlY3Q7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpCisgICAgICAgICAgICBl
bmNvZGVyIDw8IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IG9wYWNpdHk7Cisg
ICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKQorICAgICAg
ICAgICAgZW5jb2RlciA8PCBiYWNraW5nU3RvcmU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICAgICAgZW5jb2RlciA8PCB0cmFuc2Zvcm07
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0p
CisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBpZiAo
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgICAgICBlbmNvZGVyIDw8
IGZpbHRlcnM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BG
aWx0ZXJzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZHJvcEZpbHRlcnMgPDwgYmFja2Ry
b3BGaWx0ZXJzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0
Zm9ybUxheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXI7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+CisgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ0xheWVy
VXBhdGVJbmZvJiByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5pZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNoYW5nZXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikgeworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hpbGRyZW4pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lm1hc2tMYXllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
cmVwbGljYUxheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBvc2l0aW9uKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5hbmNob3JQb2ludCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2l6ZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
Ym91bmRzT3JpZ2luKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0Qp
IHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByZXNlcnZlczNEKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJl
c3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKSB7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1Zpc2libGUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpIHsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tmYWNlVmlzaWJpbGl0eSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tzVG9Cb3VuZHMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpTb2xpZENvbG9yKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5zb2xpZENvbG9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdW
aXN1YWxzKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG93RGVi
dWdCb3JkZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyQ29sb3IpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmRlYnVnQm9yZGVyV2lkdGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50
Q291bnQpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3dSZXBh
aW50Q291bnRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwYWludENvdW50KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5jb250ZW50c1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c0NsaXBwaW5nUmVjdCkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY29udGVudHNDbGlwcGluZ1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpPcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5v
cGFjaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5iYWNraW5nU3RvcmUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5jaGlsZHJlblRyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OkZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZp
bHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tkcm9wRmlsdGVycykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK3N0cnVjdCBXQ1VwYXRlSW5mbyB7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEIHJvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEPiBhZGRlZExheWVyczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiByZW1vdmVkTGF5ZXJzOworICAgIFZlY3RvcjxX
Q0xheWVyVXBhdGVJbmZvPiBjaGFuZ2VkTGF5ZXJzOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgZW5jb2RlciA8PCByb290TGF5ZXI7CisgICAgICAgIGVuY29kZXIgPDwgYWRkZWRMYXll
cnM7CisgICAgICAgIGVuY29kZXIgPDwgcmVtb3ZlZExheWVyczsKKyAgICAgICAgZW5jb2RlciA8
PCBjaGFuZ2VkTGF5ZXJzOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgor
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgV0NVcGF0ZUluZm8mIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnJvb3RMYXllcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFkZGVkTGF5ZXJzKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVtb3ZlZExh
eWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmNoYW5nZWRMYXllcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0
OjpXQ0xheWVyQ2hhbmdlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAg
ICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6
OkNoaWxkcmVuLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllciwKKyAg
ICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIsCisgICAgICAgIFdlYktp
dDo6V0NMYXllckNoYW5nZTo6R2VvbWV0cnksCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5n
ZTo6UHJlc2VydmVzM0QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q29udGVudHNW
aXNpYmxlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0
eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzLAorICAgICAg
ICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IsCisgICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6RGVidWdWaXN1YWxzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6
OlJlcGFpbnRDb3VudCwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Jl
Y3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3Qs
CisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6T3BhY2l0eSwKKyAgICAgICAgV2ViS2l0
OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6VHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVu
VHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMsCisgICAg
ICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzLAorICAgICAgICBXZWJL
aXQ6OldDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIKKyAgICA+OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNt
YWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQppbmRleCBlYjQwYjRjNjZk
ZDguLjQ5YTNmNDFlZjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC00NCw2
ICs0NCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQUlSTyBPTikKIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
VVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1RFWFRV
UkVfTUFQUEVSIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVS
X1dDIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChI
QVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441343</attachid>
            <date>2021-10-15 00:47:15 -0700</date>
            <delta_ts>2021-10-18 15:14:50 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2021-10-15.diff</filename>
            <type>text/plain</type>
            <size>131030</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IGQyMjU2OTBmNWUwNC4uNTFm
Yzk3NTYwOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTEyLDYg
KzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbG9hZGVyL2FyY2hpdmUvY2YiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NmIgor
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93YyIKICkKIAogbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC0yNCw2ICsyNSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcApAQCAtNDQsNiArNDcsMTEgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCiApCiAKK2xp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2Mv
V0NQbGF0Zm9ybUxheWVyR0NHTC5oCispCisKIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVT
CiAgICAgY29tY3RsMzIKICAgICBjcnlwdDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZS5jcHAKaW5kZXggN2FlZTM4ZjM5ZjNiLi5lOWFmM2FlMGE1YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAKQEAgLTI5LDYgKzI5LDEwIEBACiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIiAvLyB+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UgbmVlZHMgaXQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZShj
b25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKQpAQCAtMTI2LDcgKzEzMCw3
IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OmluaXRpYWxpemUoY29u
c3QgU3RyaW5nJiBhdmFpbGFibGVFeHRlbnNpCiAgICAgICAgIG1fcmVxdWVzdGFibGVFeHRlbnNp
b25zLmFkZChleHRlbnNpb24pOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFQTEFU
Rk9STShDT0NPQSkgJiYgIVVTRShHUkFQSElDU19MQVlFUl9XQykKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaAppbmRleCBlOWVjYjg3YzcwYTUuLjhlOTU1OWFm
NWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oCkBAIC05OSw2ICs5
OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOworI2Vs
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBsYXRmb3JtTGF5ZXJDb250YWluZXIgbV9w
bGF0Zm9ybUxheWVyOwogI2VuZGlmCiAKICAgICAvLyBHdWFyZGVkIGJ5IHdhaXRVbnRpbEluaXRp
YWxpemVkKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0Mu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWE5YmU1N2I2Y2Rm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHAKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2Uu
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFz
ZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBtYWtlVW5p
cXVlPFdDUGxhdGZvcm1MYXllckdDR0w+KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dj
L1dDUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2Mv
V0NQbGF0Zm9ybUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5jYTM5ZTA4Y2NjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXIg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworCitwcml2YXRlOgorICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
CisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgZmluYWwgeyB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVjODY1MTdjYWEwOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdD
R0wuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV0NQbGF0Zm9ybUxheWVyR0NHTCA6IHB1YmxpYyBXQ1BsYXRmb3JtTGF5ZXIgeworcHVibGlj
OgorICAgIHVpbnQ2NF90IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcigpIHsgcmV0dXJuIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOyB9CisgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIodWludDY0X3QgaWQpIHsgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIgPSBpZDsgfQorCitwcml2YXRlOgorICAgIHVpbnQ2NF90IG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4u
Y3BwCmluZGV4IGVmYmIzNmZiNTFmMC4uMjVlMzM2MDRkOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2lu
LmNwcApAQCAtNTMsNiArNTMsOCBAQCBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJ
VE1BUCBiaXRtYXApCiAKIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7CisgICAgaWYg
KCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgSERDIGhkYyA9
IG51bGxwdHI7CiAjaWYgIVVTRShDQUlSTykKICAgICBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKS0+bV9oZGM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24uY3BwCmluZGV4IDVkMTM0YzA5YzRmYy4uYTFlYmZjZWI4M2ExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcApAQCAtMjg1MiwxNSArMjg1
MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQ
cmVzZW50ZXI6OnBhaW50Q3VycmVudEZyYW1lKFdlYgogICAgICAgICBBU1NFUlQoY2Fpcm9Gb3Jt
YXQgIT0gQ0FJUk9fRk9STUFUX0lOVkFMSUQpOwogCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICBpZiAoY2Fpcm9Gb3JtYXQgIT0gQ0FJUk9fRk9STUFU
X0lOVkFMSUQpCi0gICAgICAgICAgICBpbWFnZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgY2Fpcm9Gb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHBpdGNoKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgaWYgKGltYWdlKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzdGF0
ZSA9IGNvbnRleHQuc3RhdGUoKTsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3U3VyZmFjZSgqY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBzdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci0gICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworICAg
ICAgICBpZiAoY2Fpcm9Gb3JtYXQgIT0gQ0FJUk9fRk9STUFUX0lOVkFMSUQpIHsKKyAgICAgICAg
ICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgY2Fpcm9Gb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIHBpdGNoKSk7CisgICAgICAgICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNS
ZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgY29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoKmltYWdlLCBzcmNSZWN0LnNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3QpOwogICAgICAg
ICB9CiAjZWxzZQogI2Vycm9yICJQbGF0Zm9ybSBuZWVkcyB0byBpbXBsZW1lbnQgZHJhd2luZyBv
ZiBEaXJlY3QzRCBzdXJmYWNlIHRvIGdyYXBoaWNzIGNvbnRleHQhIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYWUzNzcyZWI2MTI1Li40MDk4YmE3ODBiOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNDQxNSw3ICs0
NDE1LDcgQEAgUmVmPENsaXBSZWN0cz4gUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhjb25z
dCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb24KICAgICBBU1NFUlQoY2xpcFJlY3RzVHlw
ZSA8IE51bUNhY2hlZENsaXBSZWN0c1R5cGVzKTsKICAgICBpZiAobV9jbGlwUmVjdHNDYWNoZSkg
ewogICAgICAgICBpZiAoYXV0byogY2xpcFJlY3RzID0gbV9jbGlwUmVjdHNDYWNoZS0+Z2V0Q2xp
cFJlY3RzKGNsaXBSZWN0c1R5cGUsIGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xp
cCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciA9PSBt
X2NsaXBSZWN0c0NhY2hlLT5tX2NsaXBSZWN0c1Jvb3RbY2xpcFJlY3RzVHlwZV0pOworICAgICAg
ICAgICAgLy9BU1NFUlQoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgPT0gbV9jbGlwUmVjdHND
YWNoZS0+bV9jbGlwUmVjdHNSb290W2NsaXBSZWN0c1R5cGVdKTsKICAgICAgICAgICAgIEFTU0VS
VChtX2NsaXBSZWN0c0NhY2hlLT5tX3Njcm9sbGJhclJlbGV2YW5jeVtjbGlwUmVjdHNUeXBlXSA9
PSBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KTsKICAgICAg
ICAgCiAjaWZkZWYgQ0hFQ0tfQ0FDSEVEX0NMSVBfUkVDVFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA4NWNh
ODhmN2E5ODIuLjdlZTk3YWY3NjRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQzLDYgKzE0MywxMCBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNlbmRpZgogCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTMyMyw2ICszMjcsMzAgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb25m
aWd1cmVMb2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW0KICNlbmRpZgogfQog
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjcmVhdGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlm
aWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLmVuc3VyZShpZGVudGlmaWVyLCBbJl0o
KSB7CisgICAgICAgIHJldHVybiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgqdGhpcywg
V1RGTW92ZShpZGVudGlmaWVyKSwgbmF0aXZlV2luZG93KTsKKyAgICB9KTsKKyAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZW1vdGVXQ0xheWVy
VHJlZUhvc3RNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitSZWZQdHI8UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGF1dG8gaXRlciA9IG1fcmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xNYXAuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX3Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisjZW5kaWYKKwogYm9vbCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0
CiB7CiAgICAgZm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCAwNWE1MDVmZWUzMjkuLmJj
MWFmMDFhNTQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC01Myw2ICs1MywxMCBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1
Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwpAQCAtODcsNiArOTEsMTAgQEAgc3RydWN0IE1lZGlhT3Zl
cnJpZGVzRm9yVGVzdGluZzsKIHN0cnVjdCBSZW1vdGVBdWRpb1Nlc3Npb25Db25maWd1cmF0aW9u
Owogc3RydWN0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnM7CiAKKyNp
ZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q7Cisj
ZW5kaWYKKwogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURjo6RGVzdHJ1
Y3Rpb25UaHJlYWQ6Ok1haW4+CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6Tm93UGxheWluZ01hbmFn
ZXI6OkNsaWVudApAQCAtMTUyLDYgKzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VE
ZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlByb3h5KCk7CiAjZW5kaWYKIAorI2lmIFVT
RShHUkFQSElDU19MQVlFUl9XQykKKyAgICBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+
IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworI2VuZGlmCisKICAgICB2b2lkIHVwZGF0ZVN1cHBvcnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAK
ICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3Q7CkBAIC0yMTcs
NiArMjI5LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBjb25maWd1cmVMb2dnaW5nQ2hhbm5l
bChjb25zdCBTdHJpbmcmLCBXVEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsKTsKIAorI2lm
IFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB2b2lkIGNyZWF0ZVdDTGF5ZXJUcmVlSG9zdChX
ZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7
CisgICAgdm9pZCByZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0
SWRlbnRpZmllcik7CisjZW5kaWYKKwogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAg
ICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBm
aW5hbDsKQEAgLTI5Niw2ICszMTMsMTEgQEAgcHJpdmF0ZToKICAgICB1c2luZyBSZW1vdGVBdWRp
b0hhcmR3YXJlTGlzdGVuZXJNYXAgPSBIYXNoTWFwPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5l
cklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJQ
cm94eT4+OwogICAgIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcCBtX3JlbW90ZUF1ZGlv
SGFyZHdhcmVMaXN0ZW5lck1hcDsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB1
c2luZyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgPSBIYXNoTWFwPFdDTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+PjsKKyAgICBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXA7CisjZW5k
aWYKKwogICAgIFJlZlB0cjxSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eT4gbV9yZW1v
dGVSZW1vdGVDb21tYW5kTGlzdGVuZXI7CiAgICAgYm9vbCBtX2lzQWN0aXZlTm93UGxheWluZ1By
b2Nlc3MgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZlNDhj
YTIwYmEwOC4uOGVhNDlhZWNmZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAt
NTEsNiArNTEsMTAgQEAgbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50
c0Rpc3BhdGNoTWVzc2FnZSB7CiAgICAgUmVsZWFzZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcihXZWJL
aXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcklkZW50aWZpZXIgaWRlbnRpZmllcikKICAg
ICBTZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKICAg
ICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hhbm5lbE5hbWUsIGVudW06dWludDhf
dCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWludDhfdCBXVEZMb2dMZXZlbCBsZXZl
bCkKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgQ3JlYXRlV0NMYXllclRyZWVIb3N0
KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBu
YXRpdmVXaW5kb3cpCisgICAgUmVsZWFzZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllcikKKyNlbmRpZgogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCAyNTYwMzk3YTUzNzIu
LmQ2NTRkZWQ1ZWNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTcyLDYgKzcyLDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKICNlbmRpZgogCisj
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTD4gY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorI2Vu
ZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiwgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYpOwogICAgIHZvaWQg
aW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5k
ZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmluZGV4IDMyNmIw
N2YyZWJkZS4uNWE2Y2U2NWU3NDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNDIsMTAgKzQyLDEyIEBAIHN0YXRpYyBib29sIGRpZFNj
aGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzOwogCiB2b2lkIFNjb3BlZFdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6c2NoZWR1bGVGcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJj
ZXMoKQogeworI2lmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAgICAgaWYgKGRpZFNjaGVkdWxl
RnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CiAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzVGltZW91
dCwgZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKTsKICAgICBkaWRTY2hlZHVsZUZyZWVXZWJH
TFJlbmRlcmluZ1Jlc291cmNlcyA9IHRydWU7CisjZW5kaWYKIH0KIAogdm9pZCBTY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uZWMyNWMwNzNiNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTAs
MCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgorI2luY2x1ZGUgIldD
U2NlbmUuaCIKKyNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitJUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVl
dWUmIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CisKK3N0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdl
YktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRp
dmVXaW5kb3cpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlV0NMYXllclRyZWVIb3N0
Pihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpZGVudGlmaWVyLCBuYXRpdmVXaW5kb3cpOworfQor
CitSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdChHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQorICAg
IDogbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAg
LCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50
b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4oKTsK
KyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtz
Y2VuZSA9IG1fc2NlbmUuZ2V0KCksIG5hdGl2ZVdpbmRvd10geworICAgICAgICBzY2VuZS0+aW5p
dGlhbGl6ZShuYXRpdmVXaW5kb3cpOworICAgIH0pOworfQorCitSZW1vdGVXQ0xheWVyVHJlZUhv
c3Q6On5SZW1vdGVXQ0xheWVyVHJlZUhvc3QoKQoreworICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MpOworICAgIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOwor
ICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3Nj
ZW5lID0gV1RGTW92ZShtX3NjZW5lKV0geworICAgICAgICAvLyBEZXN0cm95IHNjZW5lIG9uIHRo
ZSBTdHJlYW1Xb3JrUXVldWUgdGhyZWFkCisgICAgfSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICZtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKK30K
KwordWludDY0X3QgUmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWRlbnRpZmllci50b1VJbnQ2NCgpOworfQor
Cit2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRl
KQoreworICAgIGF1dG8gcmVtb3RlR0NHTCA9IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJz
LCBbdGhpc10oYXV0byYgbGF5ZXJVcGRhdGUpIC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTD4geworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlm
aWVyPEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0pOworCisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc2NlbmUgPSBtX3Nj
ZW5lLmdldCgpLCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSksIHJlbW90ZUdDR0wgPSBXVEZNb3Zl
KHJlbW90ZUdDR0wpXSgpIG11dGFibGUgeworICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUo
dXBkYXRlKSwgV1RGTW92ZShyZW1vdGVHQ0dMKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6RGlkVXBkYXRlKCkpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iM2U4N2I0MmFjNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NM
YXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIkNvbm5lY3Rp
b24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCisjaW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBHTENvbnRleHQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyOworY2xh
c3MgVGV4dHVyZU1hcHBlckxheWVyOworY2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M7CitjbGFzcyBXQ1NjZW5lOworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBSZW1v
dGVXQ0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHByaXZhdGUg
SVBDOjpNZXNzYWdlU2VuZGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdGVXQ0xheWVyVHJlZUhvc3QpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVIb3N0PiBjcmVhdGUoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmll
ciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmll
ciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0KCk7
CisgICAgLy8gbWVzc2FnZSBoYW5kbGVycworICAgIHZvaWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYp
OworCitwcml2YXRlOgorICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFdDTGF5
ZXJUcmVlSG9zdElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
Q1NjZW5lPiBtX3NjZW5lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI1MTZm
ZGE0MTkxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKworbWVzc2FnZXMgLT4gUmVtb3RlV0NMYXllclRyZWVIb3N0IE5v
dFJlZkNvdW50ZWQgeworICAgIFVwZGF0ZShzdHJ1Y3QgV2ViS2l0OjpXQ1VwYXRlSW5mbyB1cGRh
dGVJbmZvKQorfQorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2M4NzY0ZjFlYzQ4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCkBA
IC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXQ1NjZW5lLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNs
dWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TGF5ZXIpOworcHVibGljOgorICAgIExheWVyKCkgPSBkZWZhdWx0OworCisgICAgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyIHRleG1hcExheWVyOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4
dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOworICAgIFJlZlB0cjxSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTD4gcmVtb3RlR3JhcGhpY3NDb250ZXh0R0w7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMPiBnY2dsT3BlbkdMOworfTsKKwordm9pZCBXQ1NjZW5lOjppbml0aWFs
aXplKHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhl
IFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIG1fY29u
dGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVycHJldF9jYXN0
PEhXTkQ+KG5hdGl2ZVdpbmRvdykpOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30K
KworV0NTY2VuZTo6V0NTY2VuZSgpID0gZGVmYXVsdDsKKworV0NTY2VuZTo6fldDU2NlbmUoKQor
eworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFw
cGVyID0gbnVsbHB0cjsKK30KKwordm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1
cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJlbW90ZUdD
R0wpCit7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gaWQgOiB1cGRhdGUuYWRkZWRMYXllcnMpIHsKKyAg
ICAgICAgYXV0byBsYXllciA9IG1ha2VVbmlxdWU8TGF5ZXI+KCk7CisgICAgICAgIG1fbGF5ZXJz
LmFkZChpZCwgV1RGTW92ZShsYXllcikpOworICAgIH0KKworICAgIGF1dG8gcmVtb3RlR0NHTEl0
ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdpbigpOworCisgICAgZm9yIChhdXRvJiBsYXllclVwZGF0
ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVy
cy5nZXQobGF5ZXJVcGRhdGUuaWQpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5
ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAobGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlk
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXhtYXBMYXll
cjsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVy
VXBkYXRlLm1hc2tMYXllcikKKyAgICAgICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9sYXllcnMu
Z2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxh
eWVyLT50ZXhtYXBMYXllci5zZXRNYXNrTGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXll
cikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIgPSBudWxs
cHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAg
ICAgICAgICByZXBsaWNhTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5yZXBsaWNh
TGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRS
ZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBs
YXllci0+dGV4bWFwTGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24pOworICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRlLmFu
Y2hvclBvaW50KTsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXplKGxheWVy
VXBkYXRlLnNpemUpOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJvdW5kc09y
aWdpbihsYXllclVwZGF0ZS5ib3VuZHNPcmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAg
ICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUucHJlc2Vy
dmVzM0QpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50
c1JlY3QobGF5ZXJVcGRhdGUuY29udGVudHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0NsaXBwaW5nUmVjdChsYXllclVwZGF0
ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgbGF5ZXItPnRl
eG1hcExheWVyLnNldENvbnRlbnRzVmlzaWJsZShsYXllclVwZGF0ZS5jb250ZW50c1Zpc2libGUp
OworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tm
YWNlVmlzaWJpbGl0eSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZmFj
ZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAgICAgaWYg
KGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJVcGRhdGUu
bWFza3NUb0JvdW5kcyk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBhdXRvIGJpdG1hcCA9IGxheWVy
VXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRtYXAoKTsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsK
KyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRpbGVk
QmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0gYml0
bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUt
PnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBiaXRtYXAtPnNp
emUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6ZSgpIH0pOworICAgICAgICAgICAgICAgIGxheWVyLT50
ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobGF5ZXItPmJhY2tpbmdTdG9yZS5nZXQoKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRCYWNraW5nU3RvcmUobnVsbHB0cik7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdT
dG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAg
ICAgbGF5ZXItPnRleG1hcExheWVyLnNldFNvbGlkQ29sb3IobGF5ZXJVcGRhdGUuc29saWRDb2xv
cik7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVi
dWdWaXN1YWxzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldERlYnVnVmlzdWFs
cyhsYXllclVwZGF0ZS5zaG93RGVidWdCb3JkZXIsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyQ29s
b3IsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyV2lkdGgpOworICAgICAgICBpZiAobGF5ZXJVcGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAgICAgIGxh
eWVyLT50ZXhtYXBMYXllci5zZXRSZXBhaW50Q291bnRlcihsYXllclVwZGF0ZS5zaG93UmVwYWlu
dENvdW50ZXIsIGxheWVyVXBkYXRlLnJlcGFpbnRDb3VudCk7CisgICAgICAgIGlmIChsYXllclVw
ZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRPcGFjaXR5KGxheWVyVXBkYXRlLm9wYWNpdHkpOworICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRUcmFuc2Zvcm0obGF5ZXJVcGRhdGUudHJhbnNm
b3JtKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpD
aGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDaGls
ZHJlblRyYW5zZm9ybShsYXllclVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGlm
IChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmZpbHRlcnMpOwor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9w
RmlsdGVycykgeworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIucmVzZXQoKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbGF5ZXItPmJhY2tkcm9w
TGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIt
PmJhY2tkcm9wTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZSh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldE1hc2tzVG9C
b3VuZHModHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxheWVyLT5i
YWNrZHJvcExheWVyLT5zZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycyk7Cisg
ICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldFNpemUobGF5ZXJVcGRhdGUu
YmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBsYXll
ci0+YmFja2Ryb3BMYXllci0+c2V0UG9zaXRpb24obGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJz
UmVjdC5yZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXll
ci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BMYXllcihsYXllci0+YmFja2Ryb3BMYXllci5nZXQo
KSk7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVj
dChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsK
KyAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAg
bGF5ZXItPnJlbW90ZUdyYXBoaWNzQ29udGV4dEdMID0gKnJlbW90ZUdDR0xJdGVyYXRvcjsKKyAg
ICAgICAgICAgICAgICBsYXllci0+Z2NnbE9wZW5HTCA9IGxheWVyLT5yZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC0+Y29udGV4dCgpOworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRDb250ZW50c0xheWVyKGxheWVyLT5nY2dsT3BlbkdMLT5wbGF0Zm9ybUxheWVyKCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXllci0+cmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGxheWVyLT5nY2dsT3BlbkdMID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNM
YXllcihudWxscHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZW1vdGVH
Q0dMSXRlcmF0b3IrKzsKKyAgICB9CisgICAgQVNTRVJUKHJlbW90ZUdDR0xJdGVyYXRvciA9PSBy
ZW1vdGVHQ0dMLmVuZCgpKTsKKworICAgIGZvciAoYXV0byBpZCA6IHVwZGF0ZS5yZW1vdmVkTGF5
ZXJzKQorICAgICAgICBtX2xheWVycy5yZW1vdmUoaWQpOworCisgICAgYXV0byByb290TGF5ZXIg
PSAmbV9sYXllcnMuZ2V0KHVwZGF0ZS5yb290TGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICByb290
TGF5ZXItPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygpKTsK
KworICAgIEludFNpemUgd2luZG93U2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShyb290TGF5ZXItPnNp
emUoKSk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1Np
emUuaGVpZ2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Cisg
ICAgcm9vdExheWVyLT5wYWludCgqbV90ZXh0dXJlTWFwcGVyKTsKKyAgICBtX2Zwc0NvdW50ZXIu
dXBkYXRlRlBTQW5kRGlzcGxheSgqbV90ZXh0dXJlTWFwcGVyKTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBtX2NvbnRleHQtPnN3YXBCdWZmZXJzKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2Nl
bmUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lOWJmNjcyZWZjODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2Vu
ZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBw
ZXJGUFNDb3VudGVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBHTENvbnRleHQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyOworY2xhc3MgVGV4dHVyZU1h
cHBlckxheWVyOworY2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w7CitzdHJ1
Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNzIFdDU2NlbmUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdDU2NlbmUpOworcHVibGljOgorICAg
IFdDU2NlbmUoKTsKKyAgICB+V0NTY2VuZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZSh1aW50NjRf
dCBuYXRpdmVXaW5kb3cpOworICAgIHZvaWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYsIFZlY3RvcjxS
ZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgTGF5ZXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8
TGF5ZXI+PiBMYXllck1hcDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRl
eHQ+IG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJGUFNDb3VudGVy
IG1fZnBzQ291bnRlcjsKKyAgICBMYXllck1hcCBtX2xheWVyczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNwcAppbmRleCBm
MDFlNjM5ZDlkNzguLjI3MjM0Y2JmYjVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTMwLDE0ICszMCwzMSBAQAogCiAj
aW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4uaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzLmgi
CisjaW5jbHVkZSA8T2JqYmFzZS5oPgorI2luY2x1ZGUgPHd0Zi93aW4vU29mdExpbmtpbmcuaD4K
KworU09GVF9MSU5LX0xJQlJBUlkodXNlcjMyKTsKK1NPRlRfTElOS19PUFRJT05BTCh1c2VyMzIs
IFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0LCBCT09MLCBTVERBUElDQUxMVFlQRSwgKERQ
SV9BV0FSRU5FU1NfQ09OVEVYVCkpOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BV
UHJvY2Vzc01haW5XaW4gZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzTWFpbkJhc2VOb1Np
bmdsZXRvbjxHUFVQcm9jZXNzPiB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxp
emUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFNldFByb2Nlc3NEcGlBd2FyZW5lc3ND
b250ZXh0UHRyKCkpCisgICAgICAgICAgICBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0
cigpKERQSV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJfTU9OSVRPUl9BV0FSRV9WMik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CiB9OwogCiBpbnQgR1BVUHJvY2Vzc01haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogeworICAgIC8vIGZvciBEaXJlY3RYCisgICAgSFJFU1VMVCBociA9IDo6Q29Jbml0aWFs
aXplRXgobnVsbHB0ciwgQ09JTklUX01VTFRJVEhSRUFERUQpOworICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwogICAgIHJldHVybiBBdXhpbGlhcnlQcm9jZXNzTWFpbjxHUFVQcm9j
ZXNzTWFpbldpbj4oYXJnYywgYXJndik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4
IDAxNTY1ZDU1MDY5Ny4uZjkzNjEwNTc1YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAg
LTExLDYgKzExLDkgQEAgYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQogbGlzdChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMV2luLmNwcAogCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVX
Q0xheWVyVHJlZUhvc3QuY3BwCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNw
cAorCiAgICAgR1BVUHJvY2Vzcy9tZWRpYS93aW4vUmVtb3RlTWVkaWFQbGF5ZXJQcm94eVdpbi5j
cHAKIAogICAgIEdQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNwcApAQCAtNjksNiAr
NzIsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3dpbi9XZWJzaXRlRGF0YVN0b3JlV2luLmNwcAogCisgICAgVUlQcm9jZXNzL3djL0Ry
YXdpbmdBcmVhUHJveHlXQy5jcHAKKwogICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwu
Y3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAogICAgIFVJ
UHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcApAQCAtNzYsNiArODEsOCBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfU09VUkNFUwogICAgIFVJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4u
Y3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAogCisgICAgV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCisKICAgICBXZWJQcm9j
ZXNzL0dQVS9tZWRpYS93aW4vVmlkZW9MYXllclJlbW90ZVdpbi5jcHAKIAogICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcApAQCAtOTUsNiArMTAy
LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RU
ZXh0dXJlTWFwcGVyLmNwcAogCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVh
V0MuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKKyAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuY3BwCisKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCiAKICAgICBXZWJQcm9jZXNzL3dpbi9XZWJQ
cm9jZXNzTWFpbldpbi5jcHAKQEAgLTEwMiw2ICsxMTMsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRf
U09VUkNFUwogKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUworICAg
ICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vUGxhdGZvcm0vY2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9nZW5l
cmljIgogICAgICIke1dFQktJVF9ESVJ9L1BsdWdpblByb2Nlc3Mvd2luIgpAQCAtMTE5LDE2ICsx
MzEsMjUgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldCIKICAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mv
UGx1Z2lucy93aW4iCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3djIgogICAgICIke1dF
QktJVF9ESVJ9L1VJUHJvY2Vzcy93aW4iCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL3dpbi9ET00iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
d2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
IgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93YyIKICAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luIgogICAgICIke1dFQktJVF9ESVJ9L3dpbiIK
ICkKIAorbGlzdChBUFBFTkQgV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCisgICAgR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QKKworICAgIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5CispCisKIHNldChXZWJLaXRD
b21tb25JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFU30pCiBz
ZXQoV2ViS2l0Q29tbW9uU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTfSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKaW5kZXggNzgzOWY2OThkZDgxLi40OTY4ZTFlN2RhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMzU3LDYgKzM1Nyw3IEBAIGRlZiB0eXBlc190
aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJLaXQ6OlRyYWNr
UHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpUcmFuc2FjdGlvbklE
JywKICAgICAgICAgJ1dlYktpdDo6VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXInLAogICAgICAgICAnV2Vi
S2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViVVJMU2No
ZW1lSGFuZGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpYUkRldmljZUlkZW50aWZp
ZXInLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaAppbmRleCA3OWY1M2Y1M2Rj
ZjkuLjcyMmI1ZjM0YjAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2lu
Z0FyZWFJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgK
QEAgLTM3LDcgKzM3LDEwIEBAIGVudW0gY2xhc3MgRHJhd2luZ0FyZWFUeXBlIDogdWludDhfdCB7
CiAjZW5kaWYKICAgICBSZW1vdGVMYXllclRyZWUsCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzCisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljcywKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKKyAgICBXQywKICNlbmRpZgogfTsKICAgICAKQEAgLTYzLDYgKzY2LDkgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZT4gewogICAgICAgICAs
IFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpSZW1vdGVMYXllclRyZWUKICNlbGlmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIFdlYktp
dDo6RHJhd2luZ0FyZWFUeXBlOjpDb29yZGluYXRlZEdyYXBoaWNzCisjZW5kaWYKKyNpZiBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgICAgICwgV2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU6OldD
CiAjZW5kaWYKICAgICA+OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9E
cmF3aW5nQXJlYVByb3h5V0MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uMjFhNzdmYzM2NmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIK
KworI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworRHJhd2luZ0FyZWFQcm94eVdDOjpEcmF3
aW5nQXJlYVByb3h5V0MoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlOjpXQywg
d2ViUGFnZVByb3h5LCBwcm9jZXNzKQoreworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6
cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFpbnRlZFJlZ2lvbikKK3sKKyAgICB1bnBhaW50
ZWRSZWdpb24gPSByZWN0OworCisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fYmFja2luZ1N0b3JlLT5wYWludChjb250ZXh0LCByZWN0KTsKKyAgICB1bnBh
aW50ZWRSZWdpb24uc3VidHJhY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX2JhY2tpbmdTdG9yZS0+
c2l6ZSgpKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKCkK
K3sKKyAgICBkaXNjYXJkQmFja2luZ1N0b3JlKCk7CisgICAgbV9jdXJyZW50QmFja2luZ1N0b3Jl
U3RhdGVJRCsrOworICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpVcGRhdGVHZW9tZXRy
eShtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlELCBtX3NpemUpKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVByb3h5V0M6OnVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25z
dCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlE
ID09IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIGluY29ycG9yYXRlVXBk
YXRlKHVwZGF0ZUluZm8pOworICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEaWRVcGRh
dGUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eVdDOjplbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKQoreworICAgIGRpc2NhcmRCYWNraW5nU3RvcmUoKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVByb3h5V0M6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCit7CisgICAgaWYgKHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1f
YmFja2luZ1N0b3JlLmVtcGxhY2UodXBkYXRlSW5mby52aWV3U2l6ZSwgdXBkYXRlSW5mby5kZXZp
Y2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkpOworCisgICAgbV9iYWNraW5nU3RvcmUtPmlu
Y29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOworCisgICAgUmVnaW9uIGRhbWFnZVJlZ2lvbjsK
KyAgICBpZiAodXBkYXRlSW5mby5zY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJlY3QgOiB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzKQorICAgICAgICAgICAg
ZGFtYWdlUmVnaW9uLnVuaXRlKHJlY3QpOworICAgIH0gZWxzZQorICAgICAgICBkYW1hZ2VSZWdp
b24gPSBJbnRSZWN0KEludFBvaW50KCksIG1fd2ViUGFnZVByb3h5LnZpZXdTaXplKCkpOworICAg
IG1fd2ViUGFnZVByb3h5LnNldFZpZXdOZWVkc0Rpc3BsYXkoZGFtYWdlUmVnaW9uKTsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OmRpc2NhcmRCYWNraW5nU3RvcmUoKQoreworICAgIG1f
YmFja2luZ1N0b3JlID0gc3RkOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlX
Qy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMTQ3YzExY2Y0NzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5
V0MuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZWdpb247Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5V0MgZmluYWwgOiBwdWJsaWMgRHJhd2luZ0Fy
ZWFQcm94eSB7CitwdWJsaWM6CisgICAgRHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYs
IFdlYlByb2Nlc3NQcm94eSYpOworCisgICAgdm9pZCBwYWludChCYWNraW5nU3RvcmU6OlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6UmVn
aW9uJiB1bnBhaW50ZWRSZWdpb24pOworCitwcml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhUHJv
eHkKKyAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisgICAgLy8gbWVzc2FnZSBoYW5kZXJz
CisgICAgdm9pZCB1cGRhdGUodWludDY0X3QsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QsIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKTsKKworICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5m
byYpOworICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOworCisgICAgdWludDY0X3QgbV9j
dXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCB7IDAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDIy
MDg5OGMxMjJmYy4uYzc5NzA2YTEyNGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJQYWdl
Q2xpZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3Jh
cGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKICNpbmNsdWRlICJXZWJD
b250ZXh0TWVudVByb3h5V2luLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKQEAgLTQ3LDYgKzQ4LDggQEAgUGFnZUNsaWVudElt
cGw6OlBhZ2VDbGllbnRJbXBsKFdlYlZpZXcmIHZpZXcpCiAvLyBQYWdlQ2xpZW50J3MgcHVyZSB2
aXJ0dWFsIGZ1bmN0aW9ucwogc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VD
bGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKIHsKKyAgICBpZiAobV92aWV3LnBhZ2UoKS0+cHJlZmVyZW5jZXMoKS51c2VHUFVQcm9jZXNz
Rm9yV2ViR0xFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVh
UHJveHlXQz4oKm1fdmlldy5wYWdlKCksIHByb2Nlc3MpOwogICAgIHJldHVybiBtYWtlVW5pcXVl
PERyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzPigqbV92aWV3LnBhZ2UoKSwgcHJv
Y2Vzcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAppbmRleCAx
ZGZmNGNjNjgzZWEuLjBjN2Y0MGNiNDlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3Vy
YXRpb24uaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5o
IgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlXQy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2Vi
TW91c2VFdmVudC5oIgpAQCAtNDkxLDMxICs0OTIsNDMgQEAgdm9pZCBXZWJWaWV3OjpwYWludChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgaWYgKGRpcnR5UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3BhZ2UtPmVuZFByaW50aW5nKCk7Ci0gICAg
aWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3MqPihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVjdCBjb2FsZXNjaW5nIGxvZ2ljIGhlcmUu
Ci0gICAgICAgIFJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CisgICAgaWYgKG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkgeworICAgICAgICBhdXRvIHBhaW50ZXIgPSBbJl0oYXV0byBkcmF3aW5nQXJlYSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwb3J0IFdlYktpdDEncyByZWN0IGNv
YWxlc2NpbmcgbG9naWMgaGVyZS4KKyAgICAgICAgICAgIFJlZ2lvbiB1bnBhaW50ZWRSZWdpb247
CiAjaWYgVVNFKENBSVJPKQotICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWly
b193aW4zMl9zdXJmYWNlX2NyZWF0ZShoZGMpOwotICAgICAgICBjYWlyb190KiBjb250ZXh0ID0g
Y2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwotCi0gICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRlZFJlZ2lvbik7Ci0KLSAgICAgICAgY2Fpcm9fZGVzdHJv
eShjb250ZXh0KTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotI2Vs
c2UKLSAgICAgICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgICAg
IEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAgICAgICAgIEJhY2tpbmdTdG9yZTo6RFhDb25u
ZWN0aW9ucyBjb250ZXh0IHsgbV9pbW1lZGlhdGVDb250ZXh0LmdldCgpLCBiYWNrQnVmZmVyLmdl
dCgpIH07CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb193aW4z
Ml9zdXJmYWNlX2NyZWF0ZShoZGMpOworICAgICAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGNh
aXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAgICAKICAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWlu
dChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRlZFJlZ2lvbik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsgCisgICAgCisgICAgICAgICAgICBjYWly
b19kZXN0cm95KGNvbnRleHQpOworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1
cmZhY2UpOworI2Vsc2UKKyAgICAgICAgICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tC
dWZmZXI7IAorICAgICAgICAgICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIo
MCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZi
YWNrQnVmZmVyKSk7IAorICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAg
ICAgICAgICBCYWNraW5nU3RvcmU6OkRYQ29ubmVjdGlvbnMgY29udGV4dCB7IG1faW1tZWRpYXRl
Q29udGV4dC5nZXQoKSwgYmFja0J1ZmZlci5nZXQoKSB9OworICAgICAgICAgICAgICAgIGRyYXdp
bmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRlZFJlZ2lvbik7CisgICAg
ICAgICAgICB9CisgICAgCisgICAgICAgICAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsg
CiAjZW5kaWYKLQotICAgICAgICBhdXRvIHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVkUmVnaW9u
LnJlY3RzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHVucGFpbnRlZFJlY3RzKQotICAg
ICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGhkYywgbV9wYWdlLmdldCgpLCByZWN0KTsKKyAg
ICAKKyAgICAgICAgICAgIGF1dG8gdW5wYWludGVkUmVjdHMgPSB1bnBhaW50ZWRSZWdpb24ucmVj
dHMoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHVucGFpbnRlZFJlY3RzKQorICAg
ICAgICAgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgcmVjdCk7
CisgICAgICAgIH07CisgICAgICAgIHN3aXRjaCAobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6OldDOgorICAgICAgICAgICAgcGFp
bnRlcihzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5V0MqPihtX3BhZ2UtPmRyYXdpbmdBcmVh
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6
Q29vcmRpbmF0ZWRHcmFwaGljczoKKyAgICAgICAgICAgIHBhaW50ZXIoc3RhdGljX2Nhc3Q8RHJh
d2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MqPihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgZHJhd1Bh
Z2VCYWNrZ3JvdW5kKGhkYywgbV9wYWdlLmdldCgpLCBkaXJ0eVJlY3QpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKaW5kZXggYzBiYWMzOGVlYzJlLi43YTAx
MWMzNGI0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcApA
QCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykK
KyNpbmNsdWRlIDxXZWJDb3JlL1dDUGxhdGZvcm1MYXllckdDR0wuaD4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Miw2ICs2Niw5
IEBAIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHkoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mCiAgICAgLy8gVE9ETzogV2UgbXVzdCB3YWl0IHVu
dGlsIGluaXRpYWxpemVkLCBiZWNhdXNlIGF0IHRoZSBtb21lbnQgd2UgY2Fubm90IHJlY2VpdmUg
SVBDIG1lc3NhZ2VzCiAgICAgLy8gZHVyaW5nIHdhaXQgd2hpbGUgaW4gc3luY2hyb25vdXMgc3Ry
ZWFtIHNlbmQuIFNob3VsZCBiZSBmaXhlZCBhcyBwYXJ0IG9mIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTEuCiAgICAgd2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsK
KyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgc3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxh
eWVyR0NHTCo+KHBsYXRmb3JtTGF5ZXIoKSktPnNldEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cihtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyNlbmRpZgogfQog
CiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzM3MWRkOTg4ODMwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9z
dFByb3h5LmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHk6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KFdlYlBhZ2UmIHBhZ2Us
IENsaWVudCYgY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGll
bnQpCit7Cit9CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Ojp+UmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHkoKQoreworICAgIGRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKTsKK30K
KworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmY29uc3RfY2FzdDxSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eSY+KCp0aGlzKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKTsKK30KKworR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIFJlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5OjplbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpCit7CisgICAgaWYgKCFt
X2dwdVByb2Nlc3NDb25uZWN0aW9uKSB7CisgICAgICAgIGF1dG8mIGdwdVByb2Nlc3NDb25uZWN0
aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uYWRkQ2xpZW50KCp0aGlzKTsKKyAgICAg
ICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQoKSwgKnRoaXMp
OworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCkuc2VuZCgKKyAgICAg
ICAgICAgIE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVXQ0xheWVy
VHJlZUhvc3Qod2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLCBtX3BhZ2UubmF0aXZlV2luZG93
SGFuZGxlKCkpLAorICAgICAgICAgICAgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3Nh
Z2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgICAgICBtX2dwdVByb2Nlc3NDb25u
ZWN0aW9uID0gZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CisgICAgfQorICAgIHJldHVybiAqbV9ncHVQ
cm9jZXNzQ29ubmVjdGlvbjsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6
ZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCgpCit7CisgICAgaWYgKGF1dG8gZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24gPSBzdGQ6OmV4Y2hhbmdlKG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24sIG51bGxw
dHIpKSB7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLT5yZW1vdmVDbGllbnQoKnRoaXMp
OworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50
NjQoKSk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVdDTGF5ZXJUcmVlSG9z
dCh3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3Bh
dGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgfQorfQorCit2b2lk
IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3Nl
KEdQVVByb2Nlc3NDb25uZWN0aW9uJiBwcmV2aW91c0Nvbm5lY3Rpb24pCit7CisgICAgcHJldmlv
dXNDb25uZWN0aW9uLnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgbV9ncHVQcm9jZXNzQ29ubmVj
dGlvbi0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCB3Y0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CisgICAgbV9ncHVQcm9jZXNzQ29u
bmVjdGlvbiA9IG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdj
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKS50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGVJbmZvKQorewor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6VXBkYXRlKHVwZGF0ZUlu
Zm8pKTsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6ZGlkVXBkYXRlKCkK
K3sKKyAgICBtX2NsaWVudC5kaWRVcGRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi43NzhkOGNiMGEyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAs
MCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2lu
Y2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0cnVjdCBXQ1VwYXRlSW5mbzsKKworY2xhc3MgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJv
eHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAsIHByaXZhdGUgSVBD
OjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGll
bnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KTsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGll
bnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpID0gMDsK
KyAgICB9OworCisgICAgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkoV2ViUGFnZSYsIENsaWVu
dCYpOworICAgIH5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSgpOworCisgICAgdm9pZCB1cGRh
dGUoV0NVcGF0ZUluZm8mJik7CisKKyAgICB2b2lkIGRpZFVwZGF0ZSgpOworCitwcml2YXRlOgor
ICAgIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcjsgfTsKKyAgICBHUFVQ
cm9jZXNzQ29ubmVjdGlvbiYgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICB2b2lk
IGRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKTsKKworICAgIC8vIEdQVVByb2Nlc3NDb25u
ZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlcgorICAgIElQQzo6Q29u
bmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1
aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgV2Vha1B0cjxHUFVQcm9jZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsK
KyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmll
ciB7IFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBXZWJQYWdl
JiBtX3BhZ2U7CisgICAgQ2xpZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZjhhZjc3YTMxMTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5
ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5IE5vdFJlZkNvdW50
ZWQgeworICAgIERpZFVwZGF0ZSgpCit9CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3dj
L1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGRiYTA1ZTE1NWY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xheWVyVHJlZUhv
c3RJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElk
ZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV0NMYXllclRyZWVIb3N0
SWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciA9IE9i
amVjdElkZW50aWZpZXI8V0NMYXllclRyZWVIb3N0SWRlbnRpZmllclR5cGU+OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRleCBh
NTM0NDA3ZDAzNjYuLjUwMzdkZTQyYTczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgiCiAjZWxpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJEcmF3aW5nQXJlYUNv
b3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Nyw2ICs1OCwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
RHJhd2luZ0FyZWE+IERyYXdpbmdBcmVhOjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3Qg
V2ViUGFnZQogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9N
QVBQRVIpCiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6OkNvb3JkaW5hdGVkR3JhcGhpY3M6CiAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcz4o
d2ViUGFnZSwgcGFyYW1ldGVycyk7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CisgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6OldDOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxEcmF3aW5nQXJlYVdDPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKICNlbmRpZgogICAgIH0KIApA
QCAtMTA4LDYgKzExMywxMCBAQCBib29sIERyYXdpbmdBcmVhOjpzdXBwb3J0c0dQVVByb2Nlc3NS
ZW5kZXJpbmcoRHJhd2luZ0FyZWFUeXBlIHR5cGUpCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6
Q29vcmRpbmF0ZWRHcmFwaGljczoKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aAppbmRleCA1ZTBiOTc1OWM2Y2MuLjI5ZDk5YWFmOTUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC0xMzYsNiArMTM2LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgdmlld1NpemUsIGJvb2wgZmx1c2hTeW5jaHJvbm91c2x5LCBjb25zdCBXVEY6Ok1hY2hT
ZW5kUmlnaHQmIGZlbmNlUG9ydCkgeyB9CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkodWludDY0X3QsIFdlYkNvcmU6
OkludFNpemUpIHsgfTsKKyNlbmRpZgorCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8
fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCiAgICAgdmlydHVhbCB2b2lkIGxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXgg
OWQ1ZjZkY2E2ZTM4Li5iMTk2YTlmMDVkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCkBAIC00MCw2ICs0
MCwxMCBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYSBOb3RSZWZDb3VudGVkIHsKICAgICBBZGRU
cmFuc2FjdGlvbkNhbGxiYWNrSUQoV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAjZW5k
aWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBVcGRhdGVHZW9tZXRyeSh1aW50
NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKQorI2Vu
ZGlmCisKICNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIEFkanVzdFRy
YW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbikKICAg
ICBDb21taXRUcmFuc2llbnRab29tKGRvdWJsZSBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBv
cmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9E
cmF3aW5nQXJlYVdDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0Ry
YXdpbmdBcmVhV0MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MjYyZjc0NzY3NWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhV0MuaCIK
KworI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRl
ICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgor
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VC
dWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworRHJhd2luZ0FyZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25z
dCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogRHJhd2luZ0Fy
ZWEoRHJhd2luZ0FyZWFUeXBlOjpXQywgcGFyYW1ldGVycy5kcmF3aW5nQXJlYUlkZW50aWZpZXIs
IHdlYlBhZ2UpCisgICAgLCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQorICAgICwgbV9yZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5Pih3ZWJQYWdlLCAqdGhpcykpCisgICAgLCBtX2xheWVyRmFjdG9yeSgqdGhpcykKKyAgICAs
IG1fcm9vdExheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgp
LCB0aGlzLT5tX3Jvb3RMYXllckNsaWVudCkpCisgICAgLCBtX3VwZGF0ZVJlbmRlcmluZ1RpbWVy
KCp0aGlzLCAmRHJhd2luZ0FyZWFXQzo6dXBkYXRlUmVuZGVyaW5nKQorICAgICwgbV9jb21taXRR
dWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiRHJhd2luZ0FyZWFXQyBDb21taXRRdWV1ZSJfcykpCit7
CisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRyYXdp
bmcgYXJlYSByb290IikpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgbV9yb290TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKHRydWUpOworICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgIG1fcm9vdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKK30KKworRHJhd2luZ0FyZWFXQzo6fkRyYXdpbmdBcmVhV0MoKQoreworICAg
IHdoaWxlIChhdXRvIGxheWVyID0gbV9saXZlR3JhcGhpY3NMYXllcnMucmVtb3ZlSGVhZCgpKQor
ICAgICAgICBsYXllci0+Y2xlYXJPYnNlcnZlcigpOworfQorCitHcmFwaGljc0xheWVyRmFjdG9y
eSogRHJhd2luZ0FyZWFXQzo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiAm
bV9sYXllckZhY3Rvcnk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9vdExheWVy
cygpCit7CisgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47CisgICAgaWYg
KG1fY29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqbV9jb250ZW50TGF5
ZXIpOworICAgICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNo
aWxkcmVuLmFwcGVuZCgqbV92aWV3T3ZlcmxheVJvb3RMYXllcik7CisgICAgfQorICAgIG1fcm9v
dExheWVyLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgdHJpZ2dlclJlbmRl
cmluZ1VwZGF0ZSgpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9
IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0Fy
ZWFXQzo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQoreworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSBsYXllcjsKKyAgICB1cGRhdGVSb290
TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zy
b3plbihib29sIGlzRnJvemVuKQoreworICAgIGlmIChtX2lzUmVuZGVyaW5nU3VzcGVuZGVkID09
IGlzRnJvemVuKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9
IGlzRnJvemVuOworICAgIGlmICghbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCAmJiBtX2hhc0RlZmVy
cmVkUmVuZGVyaW5nVXBkYXRlKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRh
dGUgPSBmYWxzZTsKKyAgICAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30K
Kwordm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCBiYWNraW5nU3Rv
cmVTdGF0ZUlELCBJbnRTaXplIHZpZXdTaXplKQoreworICAgIG1fYmFja2luZ1N0b3JlU3RhdGVJ
RCA9IGJhY2tpbmdTdG9yZVN0YXRlSUQ7CisgICAgbV93ZWJQYWdlLnNldFNpemUodmlld1NpemUp
OworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS5zaXplKCkpOworfQorCit2b2lk
IERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlZ2lvbiA9
IHsgfTsKKyAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07
CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fd2ViUGFnZS5ib3VuZHMoKSk7Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAgIG1fcm9vdExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2RpcnR5
UmVnaW9uLnVuaXRlKHJlY3QpOworICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVdDOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkp
CisgICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Nyb2xsUmVjdCk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzY3JvbGxSZWN0ICE9IG1fc2Nyb2xsUmVjdCkgewor
ICAgICAgICAgICAgLy8gSnVzdCByZXBhaW50IHRoZSBlbnRpcmUgY3VycmVudCBzY3JvbGwgcmVj
dCwgd2UnbGwgc2Nyb2xsIHRoZSBuZXcgcmVjdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KG1fc2Nyb2xsUmVjdCk7CisgICAgICAgICAgICBtX3Njcm9sbFJlY3Qg
PSB7IH07CisgICAgICAgICAgICBtX3Njcm9sbE9mZnNldCA9IHsgfTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBHZXQgdGhlIHBhcnQgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGluIHRoZSBz
Y3JvbGwgcmVjdC4KKyAgICAgICAgUmVnaW9uIGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50
ZXJzZWN0KHNjcm9sbFJlY3QsIG1fZGlydHlSZWdpb24pOworICAgICAgICBpZiAoIWRpcnR5UmVn
aW9uSW5TY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHBh
cnRzIG9mIHRoZSBkaXJ0eSByZWdpb24gdGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4K
KyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3VidHJhY3QgdGhlbSBmcm9tIHRoZSByZWdpb24s
IG1vdmUgdGhlbSBhbmQgcmUtYWRkIHRoZW0uCisgICAgICAgICAgICBtX2RpcnR5UmVnaW9uLnN1
YnRyYWN0KHNjcm9sbFJlY3QpOworICAgICAgICAgICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMu
CisgICAgICAgICAgICBSZWdpb24gbW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVy
c2VjdCh0cmFuc2xhdGUoZGlydHlSZWdpb25JblNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSwgc2Ny
b2xsUmVjdCk7CisgICAgICAgICAgICAvLyBBbmQgYWRkIHRoZW0gYmFjay4KKyAgICAgICAgICAg
IG1fZGlydHlSZWdpb24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgorICAg
ICAgICBSZWdpb24gc2Nyb2xsUmVwYWludFJlZ2lvbiA9IHN1YnRyYWN0KHNjcm9sbFJlY3QsIHRy
YW5zbGF0ZShzY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSkpOworICAgICAgICBtX2RpcnR5UmVnaW9u
LnVuaXRlKHNjcm9sbFJlcGFpbnRSZWdpb24pOworICAgICAgICBtX3Njcm9sbFJlY3QgPSBzY3Jv
bGxSZWN0OworICAgICAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxEZWx0YTsKKyAgICAgICAg
dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
Ojp0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3Bl
bmRlZCB8fCBtX3dhaXREaWRVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmlu
Z1VwZGF0ZSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fdXBkYXRl
UmVuZGVyaW5nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdXBkYXRl
UmVuZGVyaW5nVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNo
TGF5ZXJJbWFnZUJ1ZmZlcnMoV0NVcGF0ZUluZm8mIGluZm8pCit7CisgICAgZm9yIChhdXRvJiBs
YXllckluZm8gOiBpbmZvLmNoYW5nZWRMYXllcnMpIHsKKyAgICAgICAgaWYgKGxheWVySW5mby5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZSA9IGxheWVySW5mby5iYWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGZsdXNoZXIgPSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQor
ICAgICAgICAgICAgICAgICAgICBmbHVzaGVyLT5mbHVzaCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCitib29sIERyYXdpbmdBcmVhV0M6OmlzQ29tcG9zaXRpbmdNb2Rl
KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50TGF5ZXI7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFX
Qzo6dXBkYXRlUmVuZGVyaW5nKCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCkg
eworICAgICAgICBtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlZW50cmFudCwg
ZS5nLiBhIHJBRiBjYWxsYmFjayBtYXkgZm9yY2UgcmVwYWludC4KKyAgICBpZiAobV9pblVwZGF0
ZVJlbmRlcmluZykKKyAgICAgICAgcmV0dXJuOworICAgIFNldEZvclNjb3BlPGJvb2w+IGNoYW5n
ZShtX2luVXBkYXRlUmVuZGVyaW5nLCB0cnVlKTsKKworICAgIEFTU0VSVCghbV93YWl0RGlkVXBk
YXRlKTsKKyAgICBtX3dhaXREaWRVcGRhdGUgPSB0cnVlOworCisgICAgbV93ZWJQYWdlLnVwZGF0
ZVJlbmRlcmluZygpOworICAgIG1fd2ViUGFnZS5mbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0
ZSgpOworCisgICAgT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdz
OworICAgIG1fd2ViUGFnZS5maW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShmbGFncyk7CisgICAgbV93
ZWJQYWdlLmRpZFVwZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2Rl
KCkpCisgICAgICAgIHNlbmRVcGRhdGVBQygpOworICAgIGVsc2UKKyAgICAgICAgc2VuZFVwZGF0
ZU5vbkFDKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZUFDKCkKK3sKKyAg
ICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
CisgICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMg
bm90IGF0dGFjaGVkIHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5l
ZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIp
CisgICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh7
IH0pOworCisgICAgbV91cGRhdGVJbmZvLnJvb3RMYXllciA9IG1fcm9vdExheWVyLT5wcmltYXJ5
TGF5ZXJJRCgpOworCisgICAgbV9jb21taXRRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlz
ID0gV2Vha1B0cigqdGhpcyksIHVwZGF0ZUluZm8gPSBzdGQ6OmV4Y2hhbmdlKG1fdXBkYXRlSW5m
bywgeyB9KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgZmx1c2hMYXllckltYWdlQnVmZmVycyh1cGRh
dGVJbmZvKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhp
cyA9IFdURk1vdmUod2Vha1RoaXMpLCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1cGRhdGVJbmZvKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRl
KFdURk1vdmUodXBkYXRlSW5mbykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworc3RhdGlj
IGJvb2wgc2hvdWxkUGFpbnRCb3VuZHNSZWN0KGNvbnN0IEludFJlY3QmIGJvdW5kcywgY29uc3Qg
VmVjdG9yPEludFJlY3QsIDE+JiByZWN0cykKK3sKKyAgICBjb25zdCBzaXplX3QgcmVjdFRocmVz
aG9sZCA9IDEwOworICAgIGNvbnN0IGRvdWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzU7
CisKKyAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4gcmVjdFRocmVz
aG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQXR0ZW1wdCB0byBndWVzcyB3aGV0
aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSByZWdpb24gYm91bmRzIHJlY3Qgb3IgdGhlIGlu
ZGl2aWR1YWwgcmVjdHMuCisgICAgLy8gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNl
bnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhlIGJvdW5kcy4gSWYgdGhhdCB3YXN0ZWQgc3Bh
Y2UKKyAgICAvLyBpcyB0b28gbGFyZ2UsIHRoZW4gd2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJlY3Qg
cGFpbnRpbmcgaW5zdGVhZC4KKyAgICB1bnNpZ25lZCBib3VuZHNBcmVhID0gYm91bmRzLndpZHRo
KCkgKiBib3VuZHMuaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcmVjdHNBcmVhID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQorICAgICAgICByZWN0c0Fy
ZWEgKz0gcmVjdHNbaV0ud2lkdGgoKSAqIHJlY3RzW2ldLmhlaWdodCgpOworCisgICAgZG91Ymxl
IHdhc3RlZFNwYWNlID0gMSAtIChzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3RzQXJlYSkgLyBib3Vu
ZHNBcmVhKTsKKyAgICByZXR1cm4gd2FzdGVkU3BhY2UgPD0gd2FzdGVkU3BhY2VUaHJlc2hvbGQ7
Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZU5vbkFDKCkKK3sKKyAgICBpZiAo
bV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGlkVXBkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgSW50UmVjdCBib3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5k
cygpOworICAgIEFTU0VSVChtX3dlYlBhZ2UuYm91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7Cisg
ICAgSW50U2l6ZSBiaXRtYXBTaXplID0gYm91bmRzLnNpemUoKTsKKyAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIGJpdG1hcFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgYXV0byBpbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyKGJpdG1hcFNpemUpOworICAgIGF1dG8gcmVjdHMgPSBtX2Rp
cnR5UmVnaW9uLnJlY3RzKCk7CisgICAgaWYgKHNob3VsZFBhaW50Qm91bmRzUmVjdChib3VuZHMs
IHJlY3RzKSkgeworICAgICAgICByZWN0cy5jbGVhcigpOworICAgICAgICByZWN0cy5hcHBlbmQo
Ym91bmRzKTsKKyAgICB9CisgICAgbV9kaXJ0eVJlZ2lvbiA9IHsgfTsKKworICAgIFVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbzsKKyAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUo
KTsKKyAgICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdl
KCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRz
ID0gYm91bmRzOworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMgPSByZWN0czsKKyAgICB1cGRh
dGVJbmZvLnNjcm9sbFJlY3QgPSBtX3Njcm9sbFJlY3Q7CisgICAgdXBkYXRlSW5mby5zY3JvbGxP
ZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsKKyAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgbV9z
Y3JvbGxPZmZzZXQgPSB7IH07CisKKyAgICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBpbWFnZS0+
Y29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMu
eCgpLCAtYm91bmRzLnkoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCisg
ICAgICAgIG1fd2ViUGFnZS5kcmF3UmVjdChpbWFnZS0+Y29udGV4dCgpLCByZWN0KTsKKyAgICBp
bWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5k
aXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc3RhdGVJRCA9IG1fYmFj
a2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdl
XSgpIG11dGFibGUgeworICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZs
dXNoZXIoKSkKKyAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7CisgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3Rh
dGVJRCwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFibGUg
eworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBpZiAoc3RhdGVJRCAhPSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpIHsKKyAgICAg
ICAgICAgICAgICBkaWRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqaW1hZ2UtPmVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkpLmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgdXBk
YXRlSW5mby5iaXRtYXBIYW5kbGUgPSBzdGQ6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRsZT4o
V1RGTW92ZShoYW5kbGUpKTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVh
UHJveHk6OlVwZGF0ZShzdGF0ZUlELCBXVEZNb3ZlKHVwZGF0ZUluZm8pKSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZChH
cmFwaGljc0xheWVyV0MmIGxheWVyKQoreworICAgIG1fbGl2ZUdyYXBoaWNzTGF5ZXJzLmFwcGVu
ZCgmbGF5ZXIpOworICAgIG1fdXBkYXRlSW5mby5hZGRlZExheWVycy5hcHBlbmQobGF5ZXIucHJp
bWFyeUxheWVySUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3JhcGhpY3NMYXllclJl
bW92ZWQoR3JhcGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICBtX2xpdmVHcmFwaGljc0xheWVy
cy5yZW1vdmUoJmxheWVyKTsKKyAgICBtX3VwZGF0ZUluZm8ucmVtb3ZlZExheWVycy5hcHBlbmQo
bGF5ZXIucHJpbWFyeUxheWVySUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Y29tbWl0
TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVwYXRlSW5mbyYmIGluZm8pCit7CisgICAgbV91cGRhdGVJ
bmZvLmNoYW5nZWRMYXllcnMuYXBwZW5kKFdURk1vdmUoaW5mbykpOworfQorCitSZWZQdHI8SW1h
Z2VCdWZmZXI+IERyYXdpbmdBcmVhV0M6OmNyZWF0ZUltYWdlQnVmZmVyKEZsb2F0U2l6ZSBzaXpl
KQoreworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRVc2VSZW1vdGVSZW5k
ZXJpbmdGb3IoUmVuZGVyaW5nUHVycG9zZTo6RE9NKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFn
ZS5lbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKS5jcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICByZXR1cm4gQ29uY3JldGVJbWFn
ZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjo6Y3JlYXRl
KHNpemUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdS
QTgsIG51bGxwdHIpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSgpCit7Cisg
ICAgbV93YWl0RGlkVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKG1faGFzRGVmZXJyZWRSZW5kZXJp
bmdVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNl
OworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgfQorfQorCitEcmF3aW5n
QXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OlJvb3RMYXllckNsaWVudChXZWJQYWdlJiB3ZWJQYWdl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdyYXBo
aWNzTGF5ZXJQYWludEJlaGF2aW9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRl
eHQuY2xpcChyZWN0VG9QYWludCk7CisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnZpZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWludCkp
OworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmbG9hdCBEcmF3aW5nQXJlYVdDOjpSb290
TGF5ZXJDbGllbnQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93
ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvRHJhd2luZ0FyZWFXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ODcyMTcyZGYyYjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eS5oIgorI2luY2x1ZGUgIldDTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdBcmVhV0MgZmluYWwKKyAgICA6IHB1YmxpYyBE
cmF3aW5nQXJlYQorICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXIKKyAgICAs
IHB1YmxpYyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBEcmF3aW5nQXJlYVdDKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7CisgICAgfkRyYXdpbmdBcmVhV0MoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICAvLyBE
cmF3aW5nQXJlYQorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xh
eWVyRmFjdG9yeSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKSBvdmVycmlkZTsK
KyAgICB2b2lkIGZvcmNlUmVwYWludEFzeW5jKFdlYlBhZ2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgp
IG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TGF5ZXJUcmVl
U3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKKyAgICBib29sIGxheWVyVHJlZVN0YXRlSXNG
cm96ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkOyB9
CisgICAgdm9pZCB1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIC8vIEdyYXBoaWNzTGF5
ZXJXQzo6T2JzZXJ2ZXIKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xheWVy
V0MmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNzTGF5
ZXJXQyYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVw
YXRlSW5mbyYmKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkgb3ZlcnJpZGU7CisgICAgLy8gUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHk6OkNsaWVudAorICAgIHZvaWQgZGlkVXBkYXRlKCkgb3Zl
cnJpZGU7CisKKyAgICBib29sIGlzQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgdm9pZCB1cGRhdGVS
ZW5kZXJpbmcoKTsKKyAgICB2b2lkIHNlbmRVcGRhdGVBQygpOworICAgIHZvaWQgc2VuZFVwZGF0
ZU5vbkFDKCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CisKKyAgICBjbGFzcyBSb290
TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CisgICAg
cHVibGljOgorICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYpOworICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBy
ZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRl
OworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAg
ICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgfTsKKworICAgIFJvb3RMYXllckNsaWVudCBt
X3Jvb3RMYXllckNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk+IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk7CisgICAgV0NMYXllckZhY3Rv
cnkgbV9sYXllckZhY3Rvcnk7CisgICAgRG91Ymx5TGlua2VkTGlzdDxHcmFwaGljc0xheWVyV0M+
IG1fbGl2ZUdyYXBoaWNzTGF5ZXJzOworICAgIFdlYkNvcmU6OlRpbWVyIG1fdXBkYXRlUmVuZGVy
aW5nVGltZXI7CisgICAgYm9vbCBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pblVwZGF0ZVJlbmRlcmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dhaXREaWRVcGRhdGUg
eyBmYWxzZSB9OworICAgIFdDVXBhdGVJbmZvIG1fdXBkYXRlSW5mbzsKKyAgICBSZWY8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fY29udGVudExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIFJlZjxXb3JrUXVldWU+IG1fY29tbWl0
UXVldWU7CisgICAgaW50NjRfdCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisgICAgV2Vi
Q29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Njcm9s
bFJlY3Q7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4xY2FiMWQwNjBkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0wLDAgKzEs
NDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvV0NQbGF0Zm9ybUxheWVyR0NHTC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcmFwaGljc0xheWVyV0M6OkdyYXBoaWNz
TGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50LCBPYnNl
cnZlciYgb2JzZXJ2ZXIpCisgICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KQor
ICAgICwgbV9vYnNlcnZlcigmb2JzZXJ2ZXIpCit7CisgICAgbV9vYnNlcnZlci0+Z3JhcGhpY3NM
YXllckFkZGVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllcldDOjp+R3JhcGhpY3NMYXllcldD
KCkKK3sKKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKKyAgICBpZiAobV9vYnNlcnZlcikKKyAgICAg
ICAgbV9vYnNlcnZlci0+Z3JhcGhpY3NMYXllclJlbW92ZWQoKnRoaXMpOworfQorCitHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhpY3NMYXllcldDOjpnZW5lcmF0ZUxheWVySUQo
KQoreworICAgIC8vIDAgYW5kIG1heCBjYW4ndCBiZSB1c2VkIGZvciBoYXNoIGtleXMKKyAgICBz
dGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkID0gMTsKKyAgICByZXR1cm4g
aWQrKzsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdyYXBoaWNzTGF5ZXJX
Qzo6cHJpbWFyeUxheWVySUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVySUQ7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlmICghZHJh
d3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50UmVjdCh7IHsg
fSwgbV9zaXplIH0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdWxkQ2xpcFRvTGF5ZXIp
Cit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpOworICAgIGFk
ZFJlcGFpbnRSZWN0KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVu
dHNOZWVkc0Rpc3BsYXkoKQoreworICAgIC8vIEZvciBleGFtcGxlLCBpZiBXZWJHTCBjYW52YXMg
Y2hhbmdlZCwgaXQgbmVlZHMgZmx1c2ggdG8gZGlzcGxheS4KKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoeyB9KTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldENoaWxkcmVuKFZl
Y3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4pCit7CisgICAgYm9vbCBjaGlsZHJl
bkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7
CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICByZXR1cm4gY2hpbGRyZW5DaGFuZ2Vk
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQoUmVmPEdyYXBoaWNzTGF5ZXI+
JiYgY2hpbGRMYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChXVEZNb3ZlKGNo
aWxkTGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBdEluZGV4KFJl
ZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGlj
c0xheWVyOjphZGRDaGlsZEF0SW5kZXgoV1RGTW92ZShjaGlsZExheWVyKSwgaW5kZXgpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEJlbG93KFJlZjxHcmFwaGljc0xheWVyPiYm
IGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRCZWxvdyhXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBzaWJsaW5nKTsKKyAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZShSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGls
ZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQWJvdmUoV1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKworYm9vbCBHcmFw
aGljc0xheWVyV0M6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgUmVmPEdy
YXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OnJlcGxh
Y2VDaGlsZChvbGRDaGlsZCwgV1RGTW92ZShuZXdDaGlsZCkpKSB7CisgICAgICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
cldDOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHN0
YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KG1fcGFyZW50KS0+bm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1v
dmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRNYXNrTGF5ZXIo
UmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1fbWFz
a0xheWVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVy
KFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6TWFza0xheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0
ZWRMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbV9yZXBs
aWNhdGVkTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBs
aWNhdGVkTGF5ZXIobGF5ZXIpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpSZXBsaWNhTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0UmVw
bGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7CisgICAgaWYg
KGxheWVyID09IG1fcmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoV1RGTW92ZShsYXllcikpOworICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7
CisgICAgaWYgKHBvaW50ID09IG1fcG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6
OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit7CisgICAgaWYgKHBv
aW50ID09IG1fYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRBbmNob3JQb2ludChwb2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmIChzaXplID09IG1fc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldEJvdW5kc09yaWdpbihjb25zdCBGbG9hdFBvaW50JiBvcmln
aW4pCit7CisgICAgaWYgKG9yaWdpbiA9PSBtX2JvdW5kc09yaWdpbikKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJvdW5kc09yaWdpbihvcmlnaW4pOworICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHQpCit7CisgICAgaWYgKHQgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sK
KyAgICBpZiAodCA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09IHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6
OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza3NU
b0JvdW5kcygpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NU
b0JvdW5kcyh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFu
Z2U6Ok1hc2tzVG9Cb3VuZHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0T3BhY2l0
eShmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzUmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0NsaXBwaW5nUmVjdCgpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNDbGlwcGluZ1Jl
Y3QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpD
b250ZW50c0NsaXBwaW5nUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXREcmF3
c0NvbnRlbnQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQodmFs
dWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5n
U3RvcmUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNWaXNpYmxlKGJv
b2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzQXJlVmlzaWJsZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKHZhbHVl
KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNW
aXNpYmxlKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tmYWNlVmlzaWJpbGl0
eShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2liaWxpdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0
eSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tmYWNlVmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50
c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yID09IG1f
c29saWRDb2xvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc29saWRDb2xvciA9IGNvbG9yOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIENvbnRlbnRzTGF5ZXJQdXJwb3NlKQoreworICAg
IGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpOworfQorCitib29sIEdyYXBo
aWNzTGF5ZXJXQzo6dXNlc0NvbnRlbnRzTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bs
YXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaG93RGVidWdCb3Jk
ZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpID09IHNob3cp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIo
c2hvdyk7CisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CisgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRo
KQoreworICAgIG1fZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgIG1fZGVidWdCb3JkZXJX
aWR0aCA9IHdpZHRoOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0U2hvd1JlcGFp
bnRDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIo
KSA9PSBzaG93KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd1Jl
cGFpbnRDb3VudGVyKHNob3cpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpSZXBhaW50Q291bnQpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJzQ2FuQmVDb21w
b3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgaWYgKCFmaWx0
ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byYg
ZmlsdGVyT3BlcmF0aW9uIDogZmlsdGVycy5vcGVyYXRpb25zKCkpIHsKKyAgICAgICAgaWYgKGZp
bHRlck9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHcmFwaGljc0xheWVyV0M6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKK3sKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJzQ2FuQmVDb21w
b3NpdGVkKGZpbHRlcnMpOworICAgIGlmIChHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCkgPT0gZmls
dGVycykKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CisKKyAgICBpZiAoY2Fu
Q29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBpZiAoIUdyYXBoaWNzTGF5ZXI6OnNldEZpbHRl
cnMoZmlsdGVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChH
cmFwaGljc0xheWVyOjpmaWx0ZXJzKCkuc2l6ZSgpKQorICAgICAgICBjbGVhckZpbHRlcnMoKTsK
KworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpGaWx0ZXJzKTsK
KyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKK30KKworYm9vbCBHcmFwaGljc0xheWVy
V0M6OnNldEJhY2tkcm9wRmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQor
eworICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
ZmlsdGVycyk7CisgICAgaWYgKG1fYmFja2Ryb3BGaWx0ZXJzID09IGZpbHRlcnMpCisgICAgICAg
IHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworICAgIGlmIChjYW5Db21wb3NpdGVGaWx0ZXJz
KQorICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnMoZmlsdGVycyk7Cisg
ICAgZWxzZQorICAgICAgICBjbGVhckJhY2tkcm9wRmlsdGVycygpOworICAgIG5vdGVMYXllclBy
b3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpOworICAgIHJldHVy
biBjYW5Db21wb3NpdGVGaWx0ZXJzOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFj
a2Ryb3BGaWx0ZXJzUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBiYWNrZHJvcEZpbHRlcnNS
ZWN0KQoreworICAgIGlmIChtX2JhY2tkcm9wRmlsdGVyc1JlY3QgPT0gYmFja2Ryb3BGaWx0ZXJz
UmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tkcm9wRmls
dGVyc1JlY3QoYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+
IGZsYWdzKQoreworICAgIGlmIChiZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgYm9vbCBuZWVkc0ZsdXNoID0gIW1fdW5jb21taXR0ZWRDaGFuZ2VzOworICAgIG1fdW5jb21t
aXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7CisgICAgaWYgKG5lZWRzRmx1c2gpCisgICAgICAgIGNs
aWVudCgpLm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
cldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIG1hc2stPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoYXV0byogcmVwbGljYSA9IHJl
cGxpY2FMYXllcigpKQorICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBjaGlsZC0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgaWYgKCFtX3Vu
Y29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworICAgIFdDTGF5ZXJVcGF0ZUluZm8g
dXBkYXRlOworICAgIHVwZGF0ZS5pZCA9IHByaW1hcnlMYXllcklEKCk7CisgICAgdXBkYXRlLmNo
YW5nZXMgPSBzdGQ6OmV4Y2hhbmdlKG1fdW5jb21taXR0ZWRDaGFuZ2VzLCB7IH0pOworICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgIHVw
ZGF0ZS5jaGlsZHJlbiA9IFdURjo6bWFwKGNoaWxkcmVuKCksIFtdKGF1dG8mIGxheWVyKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisgICAgICAgIH0pOwor
ICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIp
IHsKKyAgICAgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlLm1hc2tMYXll
ciA9IG1hc2tMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB1cGRhdGUubWFza0xheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpIHsKKyAgICAgICAgaWYg
KHJlcGxpY2FMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXllciA9IHJlcGxp
Y2FMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1
cGRhdGUucmVwbGljYUxheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICBpZiAodXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICB1cGRhdGUucG9z
aXRpb24gPSBwb3NpdGlvbigpOworICAgICAgICB1cGRhdGUuYW5jaG9yUG9pbnQgPSBhbmNob3JQ
b2ludCgpOworICAgICAgICB1cGRhdGUuc2l6ZSA9IHNpemUoKTsKKyAgICAgICAgdXBkYXRlLmJv
dW5kc09yaWdpbiA9IGJvdW5kc09yaWdpbigpOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAgICAgdXBkYXRlLnByZXNlcnZl
czNEID0gcHJlc2VydmVzM0QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpDb250ZW50c1JlY3QpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1JlY3QgPSBjb250ZW50
c1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50
c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgdXBkYXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0ID0gY29u
dGVudHNDbGlwcGluZ1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpDb250ZW50c1Zpc2libGUpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1Zpc2libGUgPSBj
b250ZW50c0FyZVZpc2libGUoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgIHVwZGF0ZS5iYWNrZmFjZVZpc2liaWxp
dHkgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICB1cGRhdGUubWFza3NUb0JvdW5kcyA9
IG1hc2tzVG9Cb3VuZHMoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpICYmIGNvbnRlbnRz
QXJlVmlzaWJsZSgpICYmICFzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvIGlt
YWdlID0gbV9vYnNlcnZlci0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSgpKTsKKyAgICAgICAgICAg
IEZsb2F0UmVjdCBjbGlwUmVjdCA9IHsgeyB9LCBzaXplKCkgfTsKKyAgICAgICAgICAgIHBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGltYWdlLT5jb250ZXh0KCksIGNsaXBSZWN0KTsKKyAgICAg
ICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKyAgICAgICAgICAgIHVw
ZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkpOworCisgICAg
ICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAgICAgICAgICAgIHVwZGF0ZS5jaGFu
Z2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisgICAg
ICAgIHVwZGF0ZS5zb2xpZENvbG9yID0gbV9zb2xpZENvbG9yOworICAgIGlmICh1cGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykgeworICAgICAgICB1cGRhdGUuc2hv
d0RlYnVnQm9yZGVyID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKKyAgICAgICAgdXBkYXRlLmRl
YnVnQm9yZGVyQ29sb3IgPSBtX2RlYnVnQm9yZGVyQ29sb3I7CisgICAgICAgIHVwZGF0ZS5kZWJ1
Z0JvcmRlcldpZHRoID0gbV9kZWJ1Z0JvcmRlcldpZHRoOworICAgIH0KKyAgICBpZiAodXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAgICAgdXBkYXRl
LnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7CisgICAgICAg
IHVwZGF0ZS5yZXBhaW50Q291bnQgPSByZXBhaW50Q291bnQoKTsKKyAgICB9CisgICAgaWYgKHVw
ZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAgdXBkYXRlLm9w
YWNpdHkgPSBvcGFjaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6VHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUudHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Cisg
ICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0p
CisgICAgICAgIHVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7
CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAgICAg
ICAgdXBkYXRlLmZpbHRlcnMgPSBmaWx0ZXJzKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAgICAgIHVwZGF0ZS5iYWNrZHJv
cEZpbHRlcnMgPSBiYWNrZHJvcEZpbHRlcnMoKTsKKyAgICAgICAgdXBkYXRlLmJhY2tkcm9wRmls
dGVyc1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7CisgICAgfQorICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgaWYgKG1f
cGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9ybUxheWVy
KS0+Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSAwOworICAgIH0KKyAgICBt
X29ic2VydmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5hYjVlYzQ3MDkxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApAQCAtMCwwICsxLDEw
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0Rv
dWJseUxpbmtlZExpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdyYXBoaWNz
TGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyLCBwdWJsaWMgRG91
Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPiB7CitwdWJsaWM6CisgICAgc3RydWN0
IE9ic2VydmVyIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFw
aGljc0xheWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBncmFwaGljc0xheWVyUmVt
b3ZlZChHcmFwaGljc0xheWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRM
YXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZs
b2F0U2l6ZSkgPSAwOworICAgIH07CisKKyAgICBHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5
cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmLCBPYnNlcnZlciYpOworICAgIH5HcmFw
aGljc0xheWVyV0MoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJPYnNlcnZlcigpIHsgbV9v
YnNlcnZlciA9IG51bGxwdHI7IH0KKworICAgIC8vIEdyYXBoaWNzTGF5ZXIKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgcHJpbWFyeUxheWVySUQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFNob3VsZENs
aXBUb0xheWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+
PiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4mJiwg
aW50IGluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNz
TGF5ZXI+JiYsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpIG92ZXJyaWRlOworICAgIHZvaWQgYWRk
Q2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykg
b3ZlcnJpZGU7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQs
IFJlZjxHcmFwaGljc0xheWVyPiYmIG5ld0NoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92
ZUZyb21QYXJlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihSZWZQdHI8R3Jh
cGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXll
ciopOworICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+
JiYpOworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dDNEJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q2hpbGRyZW5U
cmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFz
a3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNDbGlwcGluZ1JlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RHJhd3NDb250
ZW50KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNWaXNpYmxlKGJvb2wpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5
ZXIqLCBDb250ZW50c0xheWVyUHVycG9zZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGREaXJl
Y3RseUNvbXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHVzZXNDb250ZW50c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXREZWJ1Z0JvcmRlcihjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IHdpZHRoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBvdmVycmlkZTsKKyAgICBi
b29sIHNldEZpbHRlcnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRl
OworICAgIGJvb2wgc2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21w
b3NpdGluZ1N0YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRl
OworICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlv
blNldDxXQ0xheWVyQ2hhbmdlPik7CisKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIGdlbmVyYXRlTGF5ZXJJRCgpOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91
Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPjsKKworICAgIEdyYXBoaWNzTGF5ZXJX
QyogbV9wcmV2OworICAgIEdyYXBoaWNzTGF5ZXJXQyogbV9uZXh0OworICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVySUQgeyBnZW5lcmF0ZUxheWVySUQo
KSB9OworICAgIE9ic2VydmVyKiBtX29ic2VydmVyOworICAgIFBsYXRmb3JtTGF5ZXIqIG1fcGxh
dGZvcm1MYXllciB7IG51bGxwdHIgfTsKKyAgICBXZWJDb3JlOjpDb2xvciBtX3NvbGlkQ29sb3I7
CisgICAgV2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgIE9wdGlvblNldDxX
Q0xheWVyQ2hhbmdlPiBtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBmbG9hdCBtX2RlYnVnQm9y
ZGVyV2lkdGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzRmNTAwMmY1NGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5n
U3RvcmUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXQ0JhY2tpbmdTdG9yZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgV0NCYWNraW5nU3RvcmUoKSB7IH0KKyAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+JiYgaW1hZ2UpIHsgbV9pbWFn
ZUJ1ZmZlciA9IFdURk1vdmUoaW1hZ2UpOyB9CisgICAgU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAo
KSBjb25zdCB7IHJldHVybiBtX2JpdG1hcC5nZXQoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgYm9vbCBoYXNJbWFnZUJ1ZmZlciA9IG1faW1hZ2VCdWZmZXI7CisgICAgICAgIGVu
Y29kZXIgPDwgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlmIChoYXNJbWFnZUJ1ZmZlcikgewor
ICAgICAgICAgICAgYXV0byBoYW5kbGUgPSBzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kJj4oKm1faW1hZ2VCdWZmZXItPmVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkpLmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgZW5j
b2RlciA8PCBoYW5kbGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
RGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFdDQmFja2luZ1N0b3JlJiByZXN1bHQpCisgICAgeworICAgICAgICBib29s
IGhhc0ltYWdlQnVmZmVyOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0ltYWdlQnVm
ZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGhhc0ltYWdlQnVm
ZmVyKSB7CisgICAgICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5tX2JpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlKHN0ZDo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVm
UHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9y
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YjU2Njg3YjJi
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9XQ0xheWVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitXQ0xheWVyRmFjdG9yeTo6V0NMYXllckZhY3RvcnkoR3JhcGhpY3NM
YXllcldDOjpPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQor
eworfQorCitSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gV0NMYXllckZhY3Rvcnk6OmNyZWF0
ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSBsYXllclR5cGUsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBHcmFwaGljc0xheWVyV0MobGF5ZXJUeXBlLCBjbGllbnQsIG1fb2JzZXJ2ZXIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmIxMmQyYmU1MTFiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmgKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDTGF5ZXJGYWN0b3J5IGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBXQ0xheWVy
RmFjdG9yeShHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJik7CisKK3ByaXZhdGU6CisgICAgLy8g
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICBSZWY8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xh
eWVyV0M6Ok9ic2VydmVyJiBtX29ic2VydmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRl
SW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ5NGM2ZjA1OGVlMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dD
VXBhdGVJbmZvLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJXQ0JhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1
ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBXQ0xheWVy
Q2hhbmdlIDogdWludDMyX3QgeworICAgIENoaWxkcmVuICAgICAgICAgICAgICAgID0gMSA8PCAg
MCwKKyAgICBNYXNrTGF5ZXIgICAgICAgICAgICAgICA9IDEgPDwgIDEsCisgICAgUmVwbGljYUxh
eWVyICAgICAgICAgICAgPSAxIDw8ICAyLAorICAgIEdlb21ldHJ5ICAgICAgICAgICAgICAgID0g
MSA8PCAgMywKKyAgICBQcmVzZXJ2ZXMzRCAgICAgICAgICAgICA9IDEgPDwgIDQsCisgICAgQ29u
dGVudHNWaXNpYmxlICAgICAgICAgPSAxIDw8ICA1LAorICAgIEJhY2tmYWNlVmlzaWJpbGl0eSAg
ICAgID0gMSA8PCAgNiwKKyAgICBNYXNrc1RvQm91bmRzICAgICAgICAgICA9IDEgPDwgIDcsCisg
ICAgU29saWRDb2xvciAgICAgICAgICAgICAgPSAxIDw8ICA4LAorICAgIERlYnVnVmlzdWFscyAg
ICAgICAgICAgID0gMSA8PCAgOSwKKyAgICBSZXBhaW50Q291bnQgICAgICAgICAgICA9IDEgPDwg
MTAsCisgICAgQ29udGVudHNSZWN0ICAgICAgICAgICAgPSAxIDw8IDExLAorICAgIENvbnRlbnRz
Q2xpcHBpbmdSZWN0ICAgID0gMSA8PCAxMiwKKyAgICBPcGFjaXR5ICAgICAgICAgICAgICAgICA9
IDEgPDwgMTMsCisgICAgQmFja2luZ1N0b3JlICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgIFRy
YW5zZm9ybSAgICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICBDaGlsZHJlblRyYW5zZm9ybSAg
ICAgICA9IDEgPDwgMTYsCisgICAgRmlsdGVycyAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAor
ICAgIEJhY2tkcm9wRmlsdGVycyAgICAgICAgID0gMSA8PCAxOCwKKyAgICBQbGF0Zm9ybUxheWVy
ICAgICAgICAgICA9IDEgPDwgMTksCit9OworCitzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7Cisg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkOworICAgIE9wdGlv
blNldDxXQ0xheWVyQ2hhbmdlPiBjaGFuZ2VzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IGNoaWxkcmVuOworICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtYXNrTGF5ZXI7CisgICAgc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IHJlcGxp
Y2FMYXllcjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uOworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJvdW5kc09yaWdpbjsKKyAgICBib29sIG1hc2tzVG9C
b3VuZHM7CisgICAgYm9vbCBzaG93RGVidWdCb3JkZXI7CisgICAgYm9vbCBzaG93UmVwYWludENv
dW50ZXI7CisgICAgYm9vbCBjb250ZW50c1Zpc2libGU7CisgICAgYm9vbCBiYWNrZmFjZVZpc2li
aWxpdHk7CisgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENv
bG9yOworICAgIFdlYkNvcmU6OkNvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgb3Bh
Y2l0eTsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworICAgIGludCByZXBhaW50Q291bnQ7
CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBXQ0JhY2tpbmdTdG9y
ZSBiYWNraW5nU3RvcmU7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNm
b3JtOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3Jt
OworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9wRmlsdGVyczsKKyAgICBXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVj
dCBjb250ZW50c0NsaXBwaW5nUmVjdDsKKyAgICB1aW50NjRfdCBncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXI7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IGlkOwor
ICAgICAgICBlbmNvZGVyIDw8IGNoYW5nZXM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6Q2hpbGRyZW4pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuOworICAg
ICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgbWFza0xheWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlJlcGxpY2FMYXllcikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcmVwbGljYUxheWVyOwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KQorICAgICAgICAg
ICAgZW5jb2RlciA8PCBwb3NpdGlvbiA8PCBhbmNob3JQb2ludCA8PCBzaXplIDw8IGJvdW5kc09y
aWdpbjsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgcHJlc2VydmVzM0Q7CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgZW5jb2RlciA8
PCBjb250ZW50c1Zpc2libGU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZmFjZVZpc2li
aWxpdHk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5k
cykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgbWFza3NUb0JvdW5kczsKKyAgICAgICAgaWYgKGNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgZW5jb2RlciA8
PCBzb2xpZENvbG9yOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVn
VmlzdWFscykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc2hvd0RlYnVnQm9yZGVyIDw8IGRlYnVn
Qm9yZGVyQ29sb3IgPDwgZGVidWdCb3JkZXJXaWR0aDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNob3dS
ZXBhaW50Q291bnRlciA8PCByZXBhaW50Q291bnQ7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50
c1JlY3Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlw
cGluZ1JlY3QpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzQ2xpcHBpbmdSZWN0Owor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAgICAgICAg
ICBlbmNvZGVyIDw8IG9wYWNpdHk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6QmFja2luZ1N0b3JlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNraW5nU3RvcmU7Cisg
ICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICAg
ICAgZW5jb2RlciA8PCB0cmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVu
VHJhbnNmb3JtOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMp
CisgICAgICAgICAgICBlbmNvZGVyIDw8IGZpbHRlcnM7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBi
YWNrZHJvcEZpbHRlcnMgPDwgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8
PCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNs
YXNzIERlY29kZXI+CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBXQ0xheWVyVXBhdGVJbmZvJiByZXN1bHQpCisgICAgeworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZXMpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIpIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tMYXllcikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwbGljYUxheWVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hbmNob3JQb2ludCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzT3JpZ2luKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UHJlc2VydmVzM0QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnByZXNlcnZlczNEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29u
dGVudHNWaXNpYmxlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5j
b250ZW50c1Zpc2libGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZp
c2liaWxpdHkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tm
YWNlVmlzaWJpbGl0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3Vu
ZHMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tzVG9Cb3Vu
ZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKSB7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zb2xpZENvbG9yKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKSB7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5zaG93RGVidWdCb3JkZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9y
ZGVyQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyV2lkdGgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnNob3dSZXBhaW50Q291bnRlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwYWlu
dENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1JlY3QpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkgeworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNDbGlwcGluZ1JlY3QpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVz
dWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5iYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zv
cm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5zZm9ybSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChy
ZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKSB7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlblRyYW5zZm9ybSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpCYWNrZHJvcEZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmJhY2tkcm9wRmlsdGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzUmVj
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlm
IChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0cnVjdCBXQ1VwYXRlSW5mbyB7CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIHJvb3RMYXllcjsKKyAgICBWZWN0
b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBhZGRlZExheWVyczsK
KyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiByZW1v
dmVkTGF5ZXJzOworICAgIFZlY3RvcjxXQ0xheWVyVXBhdGVJbmZvPiBjaGFuZ2VkTGF5ZXJzOwor
CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCByb290TGF5ZXI7CisgICAg
ICAgIGVuY29kZXIgPDwgYWRkZWRMYXllcnM7CisgICAgICAgIGVuY29kZXIgPDwgcmVtb3ZlZExh
eWVyczsKKyAgICAgICAgZW5jb2RlciA8PCBjaGFuZ2VkTGF5ZXJzOworICAgIH0KKworICAgIHRl
bXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NVcGF0ZUluZm8mIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJvb3RMYXllcikpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFkZGVk
TGF5ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQucmVtb3ZlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZWRMYXllcnMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpXQ0xheWVyQ2hhbmdlPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlLAorICAgICAg
ICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuLAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6Ok1hc2tMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpSZXBs
aWNhTGF5ZXIsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6R2VvbWV0cnksCisgICAg
ICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QsCisgICAgICAgIFdlYktpdDo6
V0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJD
aGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdl
OjpNYXNrc1RvQm91bmRzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29s
b3IsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzLAorICAgICAg
ICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCwKKyAgICAgICAgV2ViS2l0OjpX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5n
ZTo6Q29udGVudHNDbGlwcGluZ1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6
T3BhY2l0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUsCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OkZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2Ry
b3BGaWx0ZXJzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIK
KyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWly
by5jbWFrZQppbmRleCBlYjQwYjRjNjZkZDguLjQ5YTNmNDFlZjY2NCAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c1dpbkNhaXJvLmNtYWtlCkBAIC00NCw2ICs0NCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9DQUlSTyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0dSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSIE9OKQorU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1dDIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441642</attachid>
            <date>2021-10-18 15:15:07 -0700</date>
            <delta_ts>2021-10-24 14:52:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228308-20211019071505.patch</filename>
            <type>text/plain</type>
            <size>151543</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Mzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFmMjAyNTU2ZWE2YmFm
Njc1ZWIwNjY5ZTJkMzdiYzI5ZjJmOTU5Ny4uMWM0MWNlNGJmNjlhYzJkMjU2ZGIzYzE3Nzc0ZGE0
MDIyMWQ5YmQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTEwLTE4ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWly
b10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBwcm9jZXNzIG1vZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODMwOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZvcm1Jbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpw
bGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93Yy9XQ1Bs
YXRmb3JtTGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQ
bGF0Zm9ybUxheWVyR0NHTC5oOiBBZGRlZCBhIHBsYXlmb3JtIGxheWVyIGZvciBHcmFwaGljc0Nv
bnRleHRHTC4KKyAgICAgICAgKFdlYkNvcmU6OldDUGxhdGZvcm1MYXllckdDR0w6OmdyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpXQ1BsYXRmb3JtTGF5ZXJH
Q0dMOjpzZXRHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6IERpc3BsYXlMaXN0CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBkb2Vzbid0IGhhdmUgYSBIREMuIERvIG5vdGhpbmcgZm9yIERpc3Bs
YXlMaXN0CisgICAgICAgIGNvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpw
YWludEN1cnJlbnRGcmFtZSk6CisgICAgICAgIFBhaW50IGEgZnJhbWUgYnkgdXNpbmcgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UgaW5zdGVhZCBvZgorICAgICAgICBDYWlybyBBUEkg
Zm9yIERpc3BsYXlMaXN0LgorCiAyMDIxLTEwLTE1ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gRG8gbm90IGNsYW1wIGZs
ZXggYmFzZSBzaXplIHdpdGgge21pbnxtYXh9LXtoZWlnaHR8d2lkdGh9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ2
MzczZjQyNGQwN2UyM2UxOWNlOWZlZjk3NjVjYzljNDZiNDgyYWUuLmEyYmNlZTVkYTU2MDZjN2Iz
MzJjODFhNjIxOWM1MmYwNjBkZDYzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTk4IEBACisyMDIx
LTEwLTE4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAg
ICAgIFtXaW5DYWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBwcm9jZXNzIG1vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODMwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3
IEdyYXBoaWNzTGF5ZXIgaW1wbGVtZW50YXRpb24gR3JhcGhpY3NMYXllcldDIHdoaWNoCisgICAg
ICAgIHRyYW5zZmVycyBHcmFwaGljc0xheWVyIHRyZWUgdG8gR1BVIHByb2Nlc3MgYW5kIHJ1biB0
aGUgY29tcG9zaXRvcgorICAgICAgICAoVGV4dHVyZU1hcHBlcikgaW4gR1BVIHByb2Nlc3MuCisK
KyAgICAgICAgSW4gR1BVIHByb2Nlc3MgbW9kZSwgV2ViR0wgaXMgcnVuIGluIEdQVSBwcm9jZXNz
LiBTbywgdGhlCisgICAgICAgIGNvbXBvc2l0b3Igc2hvdWxkIGJlIHJ1biBpbiBHUFUgcHJvY2Vz
cy4gT3RoZXJ3aXNlLCB0aGUgb3V0cHV0CisgICAgICAgIHRleHV0cmUgb2YgV2ViR0wgaGFzIHRv
IGJlIHRyYW5zZmVycmVkIGZyb20gR1BVIHByb2Nlc3MgdG8gdGhlCisgICAgICAgIGNvbXBvc2l0
b3IgcHJvY2VzcyAoVUkgcHJvY2VzcyBvciB3ZWIgcHJvY2VzcykuCisKKyAgICAgICAgQmVjYXVz
ZSBBTkdMRSBpc24ndCB0aHJlYWQtc2FmZSwgdGhlIGNvbXBvc2l0b3IgYW5kIFdlYkdMIHNob3Vs
ZAorICAgICAgICBiZSBydW4gaW4gdGhlIHNhbWUgdGhyZWFkIGluIEdQVSBwcm9jZXNzLgorCisg
ICAgICAgIEVuYWJsaW5nIGdwdV9wcm9jZXNzX3dlYmdsIGFsc28gZW5hYmxlcyBHUFUgcHJvY2Vz
cyBjb21wb3NpdGluZyBub3cuCisgICAgICAgID4gcmVnIGFkZCBIS0VZX0NVUlJFTlRfVVNFUlxT
b2Z0d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nlc3Nfd2ViZ2wgL3QgUkVHX0RXT1JEIC9kIDEgL2YK
KworICAgICAgICBncHVfcHJvY2Vzc19jYW52YXNfcmVuZGVyaW5nIGNhbiBhbHNvIGJlIGVuYWJs
ZWQuCisgICAgICAgID4gcmVnIGFkZCBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQg
L3YgZ3B1X3Byb2Nlc3NfY2FudmFzX3JlbmRlcmluZyAvdCBSRUdfRFdPUkQgL2QgMSAvZgorCisg
ICAgICAgIEVuYWJsaW5nIGdwdV9wcm9jZXNzX2RvbV9yZW5kZXJpbmcgaXMgc3RpbGwgZXhwZXJp
bWVudGFsLgorICAgICAgICA+IHJlZyBhZGQgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcV2Vi
S2l0IC92IGdwdV9wcm9jZXNzX2RvbV9yZW5kZXJpbmcgL3QgUkVHX0RXT1JEIC9kIDEgL2YKKwor
ICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHJlc3RvcmUgdGhlIG5vbi1HUFUgcHJvY2Vz
cyBtb2RlLgorICAgICAgICA+IHJlZyBkZWxldGUgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVc
V2ViS2l0IC92IGdwdV9wcm9jZXNzX2NhbnZhc19yZW5kZXJpbmcgL2YKKyAgICAgICAgPiByZWcg
ZGVsZXRlIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc193
ZWJnbCAvZgorICAgICAgICA+IHJlZyBkZWxldGUgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVc
V2ViS2l0IC92IGdwdV9wcm9jZXNzX2RvbV9yZW5kZXJpbmcgL2YKKworICAgICAgICAqIEdQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVdDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpmaW5kUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuaDoK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzczo6c2hhcmVkR0xDb250ZXh0KToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmg6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3Vy
Y2VzUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNjb3BlZFdlYkdMUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdDo6c2NoZWR1bGVGcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMpOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6On5SZW1vdGVX
Q0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKToKKyAgICAgICAgKiBH
UFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5tZXNz
YWdlcy5pbjogQWRkZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5l
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldDU2NlbmU6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViS2l0OjpXQ1NjZW5lOjp+V0NTY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldDU2Nl
bmU6OnVwZGF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmg6
IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTaGFyZWRHTENvbnRl
eHRIb2xkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldDU2hhcmVkR0xDb250ZXh0SG9s
ZGVyOjpnbENvbnRleHRIb2xkZXJGb3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXQ1NoYXJl
ZEdMQ29udGV4dEhvbGRlcjo6cmVtb3ZlSG9sZGVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dp
bi9HUFVQcm9jZXNzTWFpbldpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NNYWlu
KToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weToKKyAgICAgICAgKHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVj
bGFyZWQpOgorICAgICAgICAoY29uZGl0aW9uc19mb3JfaGVhZGVyKToKKyAgICAgICAgKiBTaGFy
ZWQvRHJhd2luZ0FyZWFJbmZvLmg6CisgICAgICAgICogVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVh
UHJveHlXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6
OkRyYXdpbmdBcmVhUHJveHlXQyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlX
Qzo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6OnNpemVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6aW5jb3Jw
b3JhdGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6OmRpc2Nh
cmRCYWNraW5nU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5
V0MuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpwYWludCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6ZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpncHVQcm9jZXNzQ29u
bmVjdGlvbkRpZENsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRVcGRhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6d2NMYXllclRy
ZWVIb3N0SWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhOjpzdXBwb3J0c0dQVVByb2Nlc3NSZW5kZXJpbmcpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3
aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
OjpEcmF3aW5nQXJlYVdDKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6fkRyYXdp
bmdBcmVhV0MpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVy
RmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnVwZGF0ZVJvb3RMYXll
cnMpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmF0dGFjaFZpZXdPdmVybGF5
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldExheWVy
VHJlZVN0YXRlSXNGcm96ZW4pOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjp1cGRh
dGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJpbmdVcGRhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpmbHVzaExheWVySW1hZ2VCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFXQzo6aXNDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
OjpzZW5kVXBkYXRlQUMpOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRQYWludEJvdW5kc1JlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpzZW5kVXBkYXRlTm9uQUMpOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVyQWRkZWQpOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVyUmVtb3ZlZCk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmNvbW1pdExheWVyVXBhdGVJbmZvKToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjpkaWRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OlJvb3RMYXllckNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6cGFpbnRDb250ZW50cyk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2aWNlU2NhbGVG
YWN0b3IgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJl
YVdDLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xh
eWVyV0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpHcmFw
aGljc0xheWVyV0MpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6On5HcmFwaGlj
c0xheWVyV0MpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmdlbmVyYXRlTGF5
ZXJJRCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6cHJpbWFyeUxheWVySUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c05lZWRz
RGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q2hpbGRyZW4p
OgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViS2l0OjpH
cmFwaGljc0xheWVyV0M6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGlj
c0xheWVyV0M6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRSZXBs
aWNhdGVkTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldFJlcGxp
Y2F0ZWRCeUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QW5jaG9yUG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldEJvdW5kc09yaWdpbik6CisgICAgICAgIChXZWJL
aXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6R3Jh
cGhpY3NMYXllcldDOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGlj
c0xheWVyV0M6OnNldE1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNl
dENvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29u
dGVudHNDbGlwcGluZ1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNl
dERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29u
dGVudHNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENv
bnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6dXNlc0NvbnRlbnRzTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGlj
c0xheWVyV0M6OnNldFNob3dEZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNz
TGF5ZXJXQzo6c2V0RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVy
V0M6OnNldFNob3dSZXBhaW50Q291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OmZpbHRlcnNDYW5C
ZUNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldEZpbHRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BGaWx0ZXJz
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6bm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBv
c2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL1dDQmFja2luZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ0Jh
Y2tpbmdTdG9yZTo6V0NCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdT
dG9yZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6c2V0
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6Yml0bWFwIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NCYWNraW5nU3RvcmU6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpkZWNvZGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXQ0xheWVyRmFjdG9yeTo6V0NMYXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpX
Q0xheWVyRmFjdG9yeTo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V0NM
YXllclVwYXRlSW5mbzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NMYXllclVw
YXRlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V0NVcGF0ZUluZm86OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDVXBhdGVJbmZvOjpkZWNvZGUpOgorCiAyMDIxLTEw
LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2ZXJ0IHIyODQyMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2lu
Q2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4
IGQyMjU2OTBmNWUwNGM2NjFmMDVlNmYwNTY1Y2E2ZmU3MjBkN2IzMWMuLjUxZmM5NzU2MDhlZTI5
MWQ4NTUxYmEzZmFiZmY1N2MxMTdhOTRiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWly
by5jbWFrZQpAQCAtMTIsNiArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgog
ICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vY2YiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dj
IgogKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKQEAgLTI0LDYgKzI1LDggQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwCisKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCkBAIC00NCw2ICs0
NywxMSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS93aW4vUEVJ
bWFnZS5jcHAKICkKIAorbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKKykKKwogbGlzdChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMKICAgICBjb21jdGwzMgogICAgIGNyeXB0MzIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmNwcAppbmRleCBmMGM4ZTRlNDU0ZDNlMmQzODQxOWI0
YmNmZThhNTU4ZDk1Zjk4YWRjLi5kYzBjNTVlMjNkYWZhZDY3ZDk5YTI0MjUxZGY5NmZjMGRiMmE5
YTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwCkBAIC0zMyw2
ICszMywxMCBAQAogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIg
Ly8gflJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlIG5lZWRzIGl0CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzJiBhdHRycykKQEAgLTEzMCw3ICsxMzQsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlCYXNlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgYXZhaWxhYmxlRXh0
ZW5zaQogICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKIH0K
IAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlC
YXNlLmgKaW5kZXggZDljNzMzYjZjMzRlNjdkM2Q1M2Q4OTZkMTgzZjE2ZWQyOTRjNTI2OS4uZmY2
Y2JhMGJkYmIyNzFkMDg5YTZhNDVhZWMwMWJjMGU5MzBlNWFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oCkBAIC05Niw2ICs5Niw4IEBAIHByb3RlY3RlZDoKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlcjsKKyNlbGlmIFVT
RShHUkFQSElDU19MQVlFUl9XQykKKyAgICBQbGF0Zm9ybUxheWVyQ29udGFpbmVyIG1fcGxhdGZv
cm1MYXllcjsKICNlbmRpZgogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YTliZTU3YjZjZGZlZGQwNmJmNWY2NTczZTBkNzk5MWVmZWQzMDc0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCIKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisKKyNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZv
cm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBtYWtlVW5pcXVlPFdDUGxh
dGZvcm1MYXllckdDR0w+KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybUxheWVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZv
cm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9y
bUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2EzOWUwOGNjY2UwMDQ4Yzg5ZDBjM2YwMjAyODU4ZWZlMDJk
NWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3djL1dDUGxhdGZvcm1MYXllci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdDUGxhdGZvcm1MYXllciA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3ByaXZhdGU6CisgICAgLy8gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIKKyAgICB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KSBmaW5hbCB7IH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjODY1MTdjYWEw
OGIyNjJlYWUyOTQ2Y2VkMDliZjY3MTRmZGVkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldD
UGxhdGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdDUGxhdGZv
cm1MYXllckdDR0wgOiBwdWJsaWMgV0NQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICB1aW50
NjRfdCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcjsgfQorICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKHVpbnQ2NF90IGlkKSB7IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gaWQ7IH0K
KworcHJpdmF0ZToKKyAgICB1aW50NjRfdCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCBk
NWEzYmE5NDM4YTk5ZmJkNGYzYzczYTk5ZDU1NGUwNjlkNzYzNDRiLi5kODYxYjkxNTBjNWI3MWRi
ZDI2MWZhYzY1NDk2MWI1NjhlYzkzNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTMs
NiArNTMsOCBAQCBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXAp
CiAKIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3Qm
IGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7CisgICAgaWYgKCFoYXNQbGF0Zm9y
bUNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgSERDIGhkYyA9IG51bGxwdHI7CiAj
aWYgIVVTRShDQUlSTykKICAgICBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9o
ZGM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCmlu
ZGV4IDNiYTkzYTAzYWJiYTYyMGMzZmJiZTU3N2RhNTkzZDY4OGZlNWU0NDQuLjdhMDA0MzE1YWUw
OTcxMDg5ZWQyNmY3MGY0ODZlNzc3NTRlMjViZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCkBAIC0yODUyLDE1ICsyODUyLDExIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFp
bnRDdXJyZW50RnJhbWUoV2ViCiAgICAgICAgIEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19G
T1JNQVRfSU5WQUxJRCk7CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxw
dHI7Ci0gICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAg
ICAgICAgICAgIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgcGl0Y2gpOwotCi0gICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5z
dGF0ZSgpOwotICAgICAgICAgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAg
ICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWly
b0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwg
cGl0Y2gpKTsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdU
Rk1vdmUoc3VyZmFjZSkpOworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2Us
IHNyY1JlY3Quc2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAj
ZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGltcGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1
cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggZmIyMDdjNDYzNmNk
NWYxZDhhMjYxNWQ0ODFjNWZiN2MwZWQ5NDNhYy4uZTk2ZmFmZTA5OWU4NDQ5OTUzNjBjNDNmZTgw
NzViNjljMmU4M2QyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMzMCw2
ICszMzQsMzAgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW0KICNlbmRpZgogfQogCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50
aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
cmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLmVuc3VyZShpZGVudGlmaWVyLCBbJl0oKSB7CisgICAg
ICAgIHJldHVybiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShp
ZGVudGlmaWVyKSwgbmF0aXZlV2luZG93KTsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhv
c3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RN
YXAucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRH
TChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIGF1dG8gaXRlciA9IG1fcmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xNYXAuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX3JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisjZW5kaWYKKwogYm9vbCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiB7CiAgICAg
Zm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCA5YzUyMzY0MTQyMjRhOTJkY2Y2MGRkZTFl
MGM4ZGI2Y2M1NmU4YjRlLi5lYTM1Y2I0NDM1NDhmNjRiMDA0YTMxYTZjMzc0NzA3NWI0MzY5ZDZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgKQEAgLTU3LDYgKzU3LDEwIEBACiAjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9U
Q0NTUEkuaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorI2luY2x1ZGUg
IldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CkBA
IC05MSw2ICs5NSwxMCBAQCBzdHJ1Y3QgTWVkaWFPdmVycmlkZXNGb3JUZXN0aW5nOwogc3RydWN0
IFJlbW90ZUF1ZGlvU2Vzc2lvbkNvbmZpZ3VyYXRpb247CiBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykK
K2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDsKKyNlbmRpZgorCiBjbGFzcyBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcywgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4KICAgICAs
IHB1YmxpYyBXZWJDb3JlOjpOb3dQbGF5aW5nTWFuYWdlcjo6Q2xpZW50CkBAIC0xNjEsNiArMTY5
LDEwIEBAIHB1YmxpYzoKICAgICBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eSYgaW1hZ2VEZWNv
ZGVyQVZGUHJveHkoKTsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAg
IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisjZW5kaWYKKwogICAgIHZvaWQgdXBk
YXRlU3VwcG9ydGVkUmVtb3RlQ29tbWFuZHMoKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVy
TWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKQEAgLTIyNiw2ICsyMzgsMTEgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsK
ICAgICB2b2lkIGNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKGNvbnN0IFN0cmluZyYsIFdURkxvZ0No
YW5uZWxTdGF0ZSwgV1RGTG9nTGV2ZWwpOwogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
ICAgIHZvaWQgY3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRl
bnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB2b2lkIHJlbGVhc2VXQ0xheWVy
VHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKTsKKyNlbmRpZgorCiAg
ICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIGZpbmFsOwpAQCAtMzA1LDYgKzMyMiwxMSBA
QCBwcml2YXRlOgogICAgIHVzaW5nIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcCA9IEhh
c2hNYXA8UmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVySWRlbnRpZmllciwgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lclByb3h5Pj47CiAgICAgUmVtb3RlQXVkaW9I
YXJkd2FyZUxpc3RlbmVyTWFwIG1fcmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFwOwogCisj
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHVzaW5nIFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dE1hcCA9IEhhc2hNYXA8V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4+OworICAgIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcCBt
X3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcDsKKyNlbmRpZgorCiAgICAgUmVmUHRyPFJlbW90ZVJl
bW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5PiBtX3JlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcjsK
ICAgICBib29sIG1faXNBY3RpdmVOb3dQbGF5aW5nUHJvY2VzcyB7IGZhbHNlIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggYzFiZjgwMTljZWFiNDFmNzlhNmY1YWRlZTFmYTg2
MTZlMjA1ZWIwYy4uMzkxYzE5ZmU5ZDg1MTRmNzRmYzFhNDM4ODY0OTBiNmFhZDNhNWFlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTUxLDYgKzUxLDEwIEBAIG1lc3NhZ2VzIC0+
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgewogICAgIFJl
bGVhc2VSZW1vdGVDb21tYW5kTGlzdGVuZXIoV2ViS2l0OjpSZW1vdGVSZW1vdGVDb21tYW5kTGlz
dGVuZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCiAgICAgU2V0VXNlclByZWZlcnJlZExhbmd1YWdl
cyhWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMpCiAgICAgQ29uZmlndXJlTG9nZ2luZ0NoYW5uZWwo
U3RyaW5nIGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3QgV1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRl
LCBlbnVtOnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwpCisjaWYgVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQorICAgIENyZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQorICAgIFJlbGVhc2VX
Q0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCisjZW5kaWYKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oCmluZGV4IDU0MWY1YjBmZjJjZDAxNmRkN2EyNDRhMzUz
MmJlOTQ3ZWQ0YTg0OTEuLmQyNTI3MzM4ZmZmNzE2ZWZiZmVmMTc5ZTZlMTVhMmNjZjc5NTIxZjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaApAQCAtNDIsNiArNDIsMTAgQEAK
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgogI2VuZGlm
CiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiV0NTaGFyZWRHTENvbnRl
eHRIb2xkZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOb3dQbGF5
aW5nTWFuYWdlcjsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CkBAIC05Miw2ICs5NiwxMCBAQCBw
dWJsaWM6CiAgICAgV29ya1F1ZXVlJiBsaWJXZWJSVENDb2RlY3NRdWV1ZSgpOwogI2VuZGlmCiAK
KyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgV0NTaGFyZWRHTENvbnRleHRIb2xkZXIm
IHNoYXJlZEdMQ29udGV4dCgpIHsgcmV0dXJuIG1fc2hhcmVkR0xDb250ZXh0OyB9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShWUDkpCiAgICAgdm9pZCBlbmFibGVWUDlEZWNvZGVycyhib29sIHNob3Vs
ZEVuYWJsZVZQOERlY29kZXIsIGJvb2wgc2hvdWxkRW5hYmxlVlA5RGVjb2RlciwgYm9vbCBzaG91
bGRFbmFibGVWUDlTV0RlY29kZXIpOwogI2VuZGlmCkBAIC0xODQsNiArMTkyLDEwIEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9saWJXZWJSVENDb2RlY3NRdWV1ZTsKICNlbmRp
ZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFdDU2hhcmVkR0xDb250ZXh0SG9s
ZGVyIG1fc2hhcmVkR0xDb250ZXh0OworI2VuZGlmCisKICAgICBzdHJ1Y3QgR1BVU2Vzc2lvbiB7
CiAgICAgICAgIFN0cmluZyBtZWRpYUNhY2hlRGlyZWN0b3J5OwogI2lmIEVOQUJMRShMRUdBQ1lf
RU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCBlZjQxZWE2MDgyYmFi
M2YzYzI4ZmIzMjE3ZmExODY0OTI4M2I2ZGNmLi5hMDcyOTc2NWNiNWQ3MThjZjVhNzVjYTg2MmU3
ZmJlNTc0ODc2ZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtNjcsNiArNjcsMTAgQEAg
cHVibGljOgogICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwogI2VuZGlmCiAKKyNp
ZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOyB9CisjZW5kaWYK
KwogcHJvdGVjdGVkOgogICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBpbml0
aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmlu
Z1Jlc291cmNlc1JlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKaW5kZXggMzI2YjA3ZjJl
YmRlZWEwN2NhNTJlNjc2YzAyMWQyOGViNzhmMjdjNC4uNWE2Y2U2NWU3NDQ3ZDI0ZTFlNzczNjBm
MmQ4Y2ZlNjRlYTg4YjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3Vy
Y2VzUmVxdWVzdC5jcHAKQEAgLTQyLDEwICs0MiwxMiBAQCBzdGF0aWMgYm9vbCBkaWRTY2hlZHVs
ZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlczsKIAogdm9pZCBTY29wZWRXZWJHTFJlbmRlcmlu
Z1Jlc291cmNlc1JlcXVlc3Q6OnNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKCkK
IHsKKyNpZiAhVVNFKEdSQVBISUNTX0xBWUVSX1dDKQogICAgIGlmIChkaWRTY2hlZHVsZUZyZWVX
ZWJHTFJlbmRlcmluZ1Jlc291cmNlcykKICAgICAgICAgcmV0dXJuOwogICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaEFmdGVyKGZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1RpbWVvdXQsIGZy
ZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyk7CiAgICAgZGlkU2NoZWR1bGVGcmVlV2ViR0xSZW5k
ZXJpbmdSZXNvdXJjZXMgPSB0cnVlOworI2VuZGlmCiB9CiAKIHZvaWQgU2NvcGVkV2ViR0xSZW5k
ZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjYyNDcxYWYwOWNhNzdhNGY3NWMy
ZmMzM2JjYTdhMThjNTY2Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTAsMCArMSwx
MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisj
aW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nl
c3MuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVl
dWUuaCIKKyNpbmNsdWRlICJXQ1NjZW5lLmgiCisjaW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworSVBDOjpTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlJiByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtR
dWV1ZSgpOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVIb3N0PiBSZW1vdGVX
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0
aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRp
ZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPFJl
bW90ZVdDTGF5ZXJUcmVlSG9zdD4oY29ubmVjdGlvblRvV2ViUHJvY2VzcywgaWRlbnRpZmllciwg
bmF0aXZlV2luZG93KTsKK30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0OjpSZW1vdGVXQ0xheWVy
VHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90
IG5hdGl2ZVdpbmRvdykKKyAgICA6IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcyhjb25uZWN0aW9u
VG9XZWJQcm9jZXNzKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3No
YXJlZEdMQ29udGV4dEhvbGRlcihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdwdVByb2Nlc3MoKS5z
aGFyZWRHTENvbnRleHQoKS5nbENvbnRleHRIb2xkZXJGb3JXaW5kb3cobmF0aXZlV2luZG93KSkK
K3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgbV9z
Y2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4oKTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRH
TFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIGdsQ29u
dGV4dEhvbGRlciA9IG1fc2hhcmVkR0xDb250ZXh0SG9sZGVyLmdldCgpLCBuYXRpdmVXaW5kb3dd
IHsKKyAgICAgICAgaWYgKCFnbENvbnRleHRIb2xkZXItPmNvbnRleHQpCisgICAgICAgICAgICBn
bENvbnRleHRIb2xkZXItPmNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5k
b3cocmVpbnRlcnByZXRfY2FzdDxIV05EPihuYXRpdmVXaW5kb3cpKTsKKyAgICAgICAgc2NlbmUt
PmluaXRpYWxpemUoKmdsQ29udGV4dEhvbGRlci0+Y29udGV4dCk7CisgICAgfSk7Cit9CisKK1Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdDo6flJlbW90ZVdDTGF5ZXJUcmVlSG9zdCgpCit7CisgICAgQVNT
RVJUKG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcyk7CisgICAgbV9jb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZp
ZXIudG9VSW50NjQoKSk7CisgICAgYXV0byBnbENvbnRleHRIb2xkZXIgPSBtX2Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MtPmdwdVByb2Nlc3MoKS5zaGFyZWRHTENvbnRleHQoKS5yZW1vdmVIb2xkZXIo
bV9zaGFyZWRHTENvbnRleHRIb2xkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbZ2xDb250ZXh0SG9sZGVy
ID0gV1RGTW92ZShnbENvbnRleHRIb2xkZXIpLCBzY2VuZSA9IFdURk1vdmUobV9zY2VuZSldKCkg
bXV0YWJsZSB7CisgICAgICAgIC8vIERlc3Ryb3kgc2NlbmUgb24gdGhlIFN0cmVhbVdvcmtRdWV1
ZSB0aHJlYWQuCisgICAgICAgIHNjZW5lID0gbnVsbHB0cjsKKyAgICAgICAgLy8gZ2xDb250ZXh0
SG9sZGVyIGNhbiBiZSBkZXN0cm95ZWQgb24gdGhlIFN0cmVhbVdvcmtRdWV1ZSB0aHJlYWQgYmVj
YXVzZSBpdCBoYXNPbmVSZWYuCisgICAgfSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3Rl
V0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuICZtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKK30KKwordWlu
dDY0X3QgUmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lk
IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlKQorewor
ICAgIGF1dG8gcmVtb3RlR0NHTCA9IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzLCBbdGhp
c10oYXV0byYgbGF5ZXJVcGRhdGUpIC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4g
eworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRm
b3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlmaWVyPEdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0pOworCisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNw
YXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc2NlbmUgPSBtX3NjZW5lLmdl
dCgpLCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSksIHJlbW90ZUdDR0wgPSBXVEZNb3ZlKHJlbW90
ZUdDR0wpXSgpIG11dGFibGUgeworICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBkYXRl
KSwgV1RGTW92ZShyZW1vdGVHQ0dMKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6RGlkVXBkYXRlKCkpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzJhODA5YWRmY2JjZWRmOGYwMjJjZmM2YTk1OTljOGE4MWQ1MGQxOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3QuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
KyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiV0NTaGFy
ZWRHTENvbnRleHRIb2xkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250
ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBlcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2Ns
YXNzIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworY2xhc3MgV0NTY2VuZTsKK3N0
cnVjdCBXQ1VwYXRlSW5mbzsKKworY2xhc3MgUmVtb3RlV0NMYXllclRyZWVIb3N0IDogcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3Rl
V0NMYXllclRyZWVIb3N0KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVdDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBX
ZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7
CisgICAgUmVtb3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBX
ZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7
CisgICAgflJlbW90ZVdDTGF5ZXJUcmVlSG9zdCgpOworICAgIC8vIG1lc3NhZ2UgaGFuZGxlcnMK
KyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29u
bmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1faWRl
bnRpZmllcjsKKyAgICBSZWZQdHI8V0NTaGFyZWRHTENvbnRleHRIb2xkZXI6OkhvbGRlcj4gbV9z
aGFyZWRHTENvbnRleHRIb2xkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDU2NlbmU+IG1fc2Nl
bmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElD
U19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI1MTZmZGE0MTkxZGI2NTA5YTM2ODdlYTMxNjQ4NDJlNjY2YWJkZDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdCBOb3RSZWZDb3VudGVkIHsK
KyAgICBVcGRhdGUoc3RydWN0IFdlYktpdDo6V0NVcGF0ZUluZm8gdXBkYXRlSW5mbykKK30KKwor
I2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDk0YTBmNGRmMGU4
ODQ4NDFkM2Y5ZWQyN2M3OTA2ZTM4OWI1YWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCkBAIC0wLDAgKzEsMTk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQ1NjZW5l
LmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJSZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllcik7CitwdWJsaWM6CisgICAgTGF5ZXIo
KSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50
CisgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHRleG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIobnVsbHB0cik7CisgICAgfQor
ICAgIHZvaWQgc2V0UGxhdGZvcm1MYXllck5lZWRzRGlzcGxheSgpIG92ZXJyaWRlIHsgfQorCisg
ICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRleG1hcExheWVyOworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOworfTsKKwordm9pZCBX
Q1NjZW5lOjppbml0aWFsaXplKEdMQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICAvLyBUaGUgY3Jl
YXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0
LgorICAgIG1fY29udGV4dCA9ICZjb250ZXh0OworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUo
KTsKK30KKworV0NTY2VuZTo6V0NTY2VuZSgpID0gZGVmYXVsdDsKKworV0NTY2VuZTo6fldDU2Nl
bmUoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0
dXJlTWFwcGVyID0gbnVsbHB0cjsKK30KKwordm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUlu
Zm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJl
bW90ZUdDR0wpCit7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gaWQgOiB1cGRhdGUuYWRkZWRMYXllcnMp
IHsKKyAgICAgICAgYXV0byBsYXllciA9IG1ha2VVbmlxdWU8TGF5ZXI+KCk7CisgICAgICAgIG1f
bGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikpOworICAgIH0KKworICAgIGF1dG8gcmVtb3Rl
R0NHTEl0ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdpbigpOworCisgICAgZm9yIChhdXRvJiBsYXll
clVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBt
X2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAobGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShh
dXRvIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXht
YXBMYXllcjsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAg
VGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYg
KGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAgICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9s
YXllcnMuZ2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRNYXNrTGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxp
Y2FMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIg
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAg
ICAgICAgICAgICAgICByZXBsaWNhTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5y
ZXBsaWNhTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAg
ICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24p
OworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBk
YXRlLmFuY2hvclBvaW50KTsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXpl
KGxheWVyVXBkYXRlLnNpemUpOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJv
dW5kc09yaWdpbihsYXllclVwZGF0ZS5ib3VuZHNPcmlnaW4pOworICAgICAgICB9CisgICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisg
ICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUu
cHJlc2VydmVzM0QpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRD
b250ZW50c1JlY3QobGF5ZXJVcGRhdGUuY29udGVudHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVy
VXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0NsaXBwaW5nUmVjdChsYXll
clVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgbGF5
ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzVmlzaWJsZShsYXllclVwZGF0ZS5jb250ZW50c1Zp
c2libGUpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRC
YWNrZmFjZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAg
ICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRz
KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJV
cGRhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBhdXRvIGJpdG1hcCA9
IGxheWVyVXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRtYXAoKTsKKyAgICAgICAgICAgIGlmIChiaXRt
YXApIHsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBl
clRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGltYWdl
ID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5n
U3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBiaXRt
YXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6ZSgpIH0pOworICAgICAgICAgICAgICAgIGxh
eWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobGF5ZXItPmJhY2tpbmdTdG9yZS5nZXQo
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBM
YXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFNvbGlkQ29sb3IobGF5ZXJVcGRhdGUuc29s
aWRDb2xvcik7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldERlYnVn
VmlzdWFscyhsYXllclVwZGF0ZS5zaG93RGVidWdCb3JkZXIsIGxheWVyVXBkYXRlLmRlYnVnQm9y
ZGVyQ29sb3IsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyV2lkdGgpOworICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBhaW50Q291bnRlcihsYXllclVwZGF0ZS5zaG93
UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJlcGFpbnRDb3VudCk7CisgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRPcGFjaXR5KGxheWVyVXBkYXRlLm9wYWNpdHkpOworICAg
ICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkK
KyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRUcmFuc2Zvcm0obGF5ZXJVcGRhdGUu
dHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAg
ICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmZpbHRl
cnMpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmJhY2tkcm9wRmls
dGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIucmVz
ZXQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbGF5ZXItPmJh
Y2tkcm9wTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIg
PSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICAgICAgICAgICAgICAgICAg
bGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldENvbnRlbnRzVmlzaWJs
ZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxh
eWVyLT5iYWNrZHJvcExheWVyLT5zZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVy
cyk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldFNpemUobGF5ZXJV
cGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0UG9zaXRpb24obGF5ZXJVcGRhdGUuYmFja2Ryb3BG
aWx0ZXJzUmVjdC5yZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BMYXllcihsYXllci0+YmFja2Ryb3BMYXll
ci5nZXQoKSk7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0
ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5
ZXIpIHsKKyAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJhdG9yKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpyZW1vdGVHQ0dMSXRlcmF0b3IpLT5wbGF0Zm9y
bUxheWVyKCk7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVy
KTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihw
bGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKG51bGxwdHIpOworICAgICAgICB9CisgICAg
ICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAgIH0KKyAgICBBU1NFUlQocmVtb3RlR0NHTEl0
ZXJhdG9yID09IHJlbW90ZUdDR0wuZW5kKCkpOworCisgICAgZm9yIChhdXRvIGlkIDogdXBkYXRl
LnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7CisKKyAgICBhdXRv
IHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBkYXRlLnJvb3RMYXllciktPnRleG1hcExheWVy
OworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoTW9ub3RvbmljVGlt
ZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZXhwYW5kZWRJbnRTaXplKHJv
b3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgo
KSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFp
bnRpbmcoKTsKKyAgICByb290TGF5ZXItPnBhaW50KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1f
ZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1f
dGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZl
cnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
U2NlbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NmJiYmIwZDE0OWEyNGFhMjY4NmFhNGE3NzE2NTYzOTJlZjk5
ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1dDU2NlbmUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBlcjsKK2NsYXNz
IFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9y
ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBXQ1NjZW5lIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXQ1NjZW5lKTsKK3B1
YmxpYzoKKyAgICBXQ1NjZW5lKCk7CisgICAgfldDU2NlbmUoKTsKKyAgICB2b2lkIGluaXRpYWxp
emUoV2ViQ29yZTo6R0xDb250ZXh0Jik7CisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJiwg
VmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+JiYpOworCitwcml2YXRlOgor
ICAgIHN0cnVjdCBMYXllcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5p
cXVlX3B0cjxMYXllcj4+IExheWVyTWFwOworCisgICAgV2ViQ29yZTo6R0xDb250ZXh0KiBtX2Nv
bnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRlBTQ291
bnRlciBtX2Zwc0NvdW50ZXI7CisgICAgTGF5ZXJNYXAgbV9sYXllcnM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NoYXJlZEdMQ29u
dGV4dEhvbGRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2hh
cmVkR0xDb250ZXh0SG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q2YTVlNjNkZGY4NTYyNmRhN2YwNzFj
NmZkY2ZlNTVlNzIzMDk4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NoYXJlZEdMQ29udGV4dEhvbGRlci5oCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dMQ29udGV4dC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworLy8gQ3JlYXRpbmcgYSBHTENvbnRleHQgZm9yIGEgd2luZG93IGZhaWxzIGlmIHRoZSB3aW5k
b3cgYWxyZWFkeSBoYXMKKy8vIG9uZS4gV2hpbGUgbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlIHdp
dGggYSBuZXcgV2ViUHJvY2VzcywgdGhlCisvLyBwcm92aXNpb25hbCBXZWJLaXQ6OldlYlBhZ2Ug
aW4gdGhlIG5ldyBXZWJQcm9jZXNzIGNhbiBoYXMgdGhlIHNhbWUKKy8vIHdpbmRvdyBoYW5kbGUu
IEdMQ29udGV4dCBzaG91bGQgYmUgc2hhcmVkIGFtb25nIGFsbAorLy8gUmVtb3RlV0NMYXllclRy
ZWVIb3N0cyB0aGF0IHJlbmRlciB0byB0aGUgc2FtZSBuYXRpdmUgd2luZG93LgorY2xhc3MgV0NT
aGFyZWRHTENvbnRleHRIb2xkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdDU2hhcmVk
R0xDb250ZXh0SG9sZGVyKTsKK3B1YmxpYzoKKyAgICBXQ1NoYXJlZEdMQ29udGV4dEhvbGRlcigp
ID0gZGVmYXVsdDsKKworICAgIHN0cnVjdCBIb2xkZXIgOiBSZWZDb3VudGVkPEhvbGRlcj4gewor
ICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGludDY0X3Qg
bmF0aXZlV2luZG93OworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciBpcyBhY2Nlc3Nl
ZCBpbiB0aGUgT3BlbkdMIHRocmVhZAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
R0xDb250ZXh0PiBjb250ZXh0OworICAgIH07CisKKyAgICBSZWY8SG9sZGVyPiBnbENvbnRleHRI
b2xkZXJGb3JXaW5kb3coaW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAgeworICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1faGFzaC5hZGQo
bmF0aXZlV2luZG93LCBudWxscHRyKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkg
CisgICAgICAgICAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1
dG8gaG9sZGVyID0gYWRvcHRSZWYoKm5ldyBIb2xkZXIpOworICAgICAgICBob2xkZXItPm5hdGl2
ZVdpbmRvdyA9IG5hdGl2ZVdpbmRvdzsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGhvbGRlci5wdHIoKTsKKyAgICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SG9sZGVyPiByZW1vdmVIb2xkZXIoUmVmPEhvbGRlcj4mJiBob2xkZXIpCisgICAgeworICAg
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAoIWhvbGRlci0+aGFz
T25lUmVmKCkpIAorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIG1faGFzaC5y
ZW1vdmUoaG9sZGVyLT5uYXRpdmVXaW5kb3cpOworICAgICAgICByZXR1cm4gaG9sZGVyOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPGludDY0X3QsIEhvbGRlcio+IG1faGFzaDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNz
TWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWlu
V2luLmNwcAppbmRleCBmMDFlNjM5ZDlkNzhiODAyYTMwOTE0NTA1MzJhOTQ2ZjAwYzY4NmY3Li4y
NzIzNGNiZmI1ZDYzODFmMTM4NWFhMzYyOWZjZmYwYmY1MGY3MDE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNwcApAQCAtMzAsMTQg
KzMwLDMxIEBACiAKICNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWFpbi5oIgogI2luY2x1ZGUg
IkdQVVByb2Nlc3MuaCIKKyNpbmNsdWRlIDxPYmpiYXNlLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9T
b2Z0TGlua2luZy5oPgorCitTT0ZUX0xJTktfTElCUkFSWSh1c2VyMzIpOworU09GVF9MSU5LX09Q
VElPTkFMKHVzZXIzMiwgU2V0UHJvY2Vzc0RwaUF3YXJlbmVzc0NvbnRleHQsIEJPT0wsIFNUREFQ
SUNBTExUWVBFLCAoRFBJX0FXQVJFTkVTU19DT05URVhUKSk7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBHUFVQcm9jZXNzTWFpbldpbiBmaW5hbDogcHVibGljIEF1eGlsaWFyeVByb2Nl
c3NNYWluQmFzZU5vU2luZ2xldG9uPEdQVVByb2Nlc3M+IHsKK3B1YmxpYzoKKyAgICBib29sIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoU2V0UHJvY2Vz
c0RwaUF3YXJlbmVzc0NvbnRleHRQdHIoKSkKKyAgICAgICAgICAgIFNldFByb2Nlc3NEcGlBd2Fy
ZW5lc3NDb250ZXh0UHRyKCkoRFBJX0FXQVJFTkVTU19DT05URVhUX1BFUl9NT05JVE9SX0FXQVJF
X1YyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgU2V0UHJvY2Vzc0RQSUF3YXJlKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH07CiAKIGludCBHUFVQcm9jZXNzTWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAgLy8gZm9yIERpcmVjdFgKKyAgICBIUkVTVUxUIGhy
ID0gOjpDb0luaXRpYWxpemVFeChudWxscHRyLCBDT0lOSVRfTVVMVElUSFJFQURFRCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgcmV0dXJuIEF1eGlsaWFyeVByb2Nl
c3NNYWluPEdQVVByb2Nlc3NNYWluV2luPihhcmdjLCBhcmd2KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UKaW5kZXggMDE1NjVkNTUwNjk3YjI1MzY3YmIzNjk3MWQ2ZmU1ZWMzM2Y3MTJmMC4u
ZjkzNjEwNTc1YzFmYmNiYmU4NjEwNGM5YWQzZjk1ZGY5YjczZDgzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCkBAIC0xMSw2ICsxMSw5IEBAIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dF
QktJVCkKIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKIAorICAgIEdQVVByb2Nlc3MvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAorICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NTY2VuZS5jcHAKKwogICAgIEdQVVByb2Nlc3MvbWVkaWEvd2luL1JlbW90ZU1lZGlhUGxh
eWVyUHJveHlXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5j
cHAKQEAgLTY5LDYgKzcyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKIAorICAgIFVJ
UHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCisKICAgICBVSVByb2Nlc3Mvd2luL1Bh
Z2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdp
bi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKQEAgLTc2LDYgKzgx
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBy
b2Nlc3NQb29sV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKIAorICAgIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAor
CiAgICAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvd2luL1ZpZGVvTGF5ZXJSZW1vdGVXaW4uY3BwCiAK
ICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAK
QEAgLTk1LDYgKzEwMiwxMCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93
Yy9EcmF3aW5nQXJlYVdDLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xh
eWVyV0MuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcAor
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAogCiAgICAgV2ViUHJv
Y2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0xMDIsNiArMTEzLDcgQEAgbGlzdChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL2dyYXBoaWNzL3djIgogICAg
ICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0v
UGxhdGZvcm0vZ2VuZXJpYyIKICAgICAiJHtXRUJLSVRfRElSfS9QbHVnaW5Qcm9jZXNzL3dpbiIK
QEAgLTExOSwxNiArMTMxLDI1IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCiAgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL1BsdWdpbnMvd2luIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93
YyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgorICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mi
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbiIKICAgICAiJHtXRUJL
SVRfRElSfS93aW4iCiApCiAKK2xpc3QoQVBQRU5EIFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwor
ICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0CisKKyAgICBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eQorKQor
CiBzZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVN9KQogc2V0KFdlYktpdENvbW1vblN5c3RlbUluY2x1ZGVEaXJlY3RvcmllcyAke1dl
YktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRkMWFkN2UxNTRlYjA5MjAyMzEwZGRmYTZiNWUx
MjFhZDJjMzkuLjM3NTRhZTQ0NzQ1ZjdlNDA4OWZjYWVlZjMyMDMwMjE2MzMwYTEwY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMzU3LDYgKzM1Nyw3IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdX
ZWJLaXQ6OlRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpU
cmFuc2FjdGlvbklEJywKICAgICAgICAgJ1dlYktpdDo6VXNlckNvbnRlbnRDb250cm9sbGVySWRl
bnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6V2ViVVJMU2NoZW1lSGFuZGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpYUkRl
dmljZUlkZW50aWZpZXInLApAQCAtMzY4LDYgKzM2OSw3IEBAIGRlZiBjb25kaXRpb25zX2Zvcl9o
ZWFkZXIoaGVhZGVyKToKICAgICAgICAgJyJJbnB1dE1ldGhvZFN0YXRlLmgiJzogWyJQTEFURk9S
TShHVEspIiwgIlBMQVRGT1JNKFdQRSkiXSwKICAgICAgICAgJyJMYXllckhvc3RpbmdDb250ZXh0
LmgiJzogWyJQTEFURk9STShDT0NPQSkiLCBdLAogICAgICAgICAnIkdlc3R1cmVUeXBlcy5oIic6
IFsiUExBVEZPUk0oSU9TX0ZBTUlMWSkiXSwKKyAgICAgICAgJyJXQ0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyLmgiJzogWyJVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpIl0sCiAgICAgICAgICc8V2ViQ29y
ZS9NZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dC5oPic6IFsiRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkiXSwKICAgICAgICAgJzxXZWJDb3JlL0RhdGFEZXRlY3RvclR5cGUuaD4nOiBb
IkVOQUJMRShEQVRBX0RFVEVDVElPTikiXSwKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdp
bmdBcmVhSW5mby5oCmluZGV4IDc5ZjUzZjUzZGNmOTg2YTZiNGQ3N2QzZWY5NTYzNzRlYTRmNDkz
MjkuLjcyMmI1ZjM0YjAwZDA4NTIxM2ZiM2MyN2U2ZDZhYjRkMDZkZmYxMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCkBAIC0zNyw3ICszNywxMCBAQCBlbnVtIGNsYXNz
IERyYXdpbmdBcmVhVHlwZSA6IHVpbnQ4X3QgewogI2VuZGlmCiAgICAgUmVtb3RlTGF5ZXJUcmVl
LAogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIp
Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljcworICAgIENvb3JkaW5hdGVkR3JhcGhpY3MsCisjZW5k
aWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgV0MsCiAjZW5kaWYKIH07CiAgICAg
CkBAIC02Myw2ICs2Niw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpE
cmF3aW5nQXJlYVR5cGU+IHsKICAgICAgICAgLCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6UmVt
b3RlTGF5ZXJUcmVlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhU
VVJFX01BUFBFUikKICAgICAgICAgLCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0
ZWRHcmFwaGljcworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgICAgICAs
IFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpXQwogI2VuZGlmCiAgICAgPjsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMWE3N2ZjMzY2YjNiNDdkZjc2MmIzMTkwZDgwOGNhYWNhN2Y4NmYwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNw
cApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZWdpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworRHJhd2luZ0FyZWFQcm94eVdDOjpEcmF3aW5nQXJlYVByb3h5V0MoV2ViUGFnZVByb3h5JiB3
ZWJQYWdlUHJveHksIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKKyAgICA6IERyYXdpbmdBcmVh
UHJveHkoRHJhd2luZ0FyZWFUeXBlOjpXQywgd2ViUGFnZVByb3h5LCBwcm9jZXNzKQoreworfQor
Cit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFp
bnRlZFJlZ2lvbikKK3sKKyAgICB1bnBhaW50ZWRSZWdpb24gPSByZWN0OworCisgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3JlLT5wYWlu
dChjb250ZXh0LCByZWN0KTsKKyAgICB1bnBhaW50ZWRSZWdpb24uc3VidHJhY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0Fy
ZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKCkKK3sKKyAgICBkaXNjYXJkQmFja2luZ1N0b3JlKCk7
CisgICAgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCsrOworICAgIHNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpVcGRhdGVHZW9tZXRyeShtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlE
LCBtX3NpemUpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OnVwZGF0ZSh1aW50NjRf
dCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorewor
ICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEID09IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRl
SUQpCisgICAgICAgIGluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOworICAgIHNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjpEaWRVcGRhdGUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQ
cm94eVdDOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQoreworICAgIGRpc2NhcmRCYWNr
aW5nU3RvcmUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OmluY29ycG9yYXRlVXBk
YXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgaWYgKHVwZGF0ZUluZm8u
dXBkYXRlUmVjdEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLmVtcGxhY2UodXBkYXRlSW5m
by52aWV3U2l6ZSwgdXBkYXRlSW5mby5kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkp
OworCisgICAgbV9iYWNraW5nU3RvcmUtPmluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOwor
CisgICAgUmVnaW9uIGRhbWFnZVJlZ2lvbjsKKyAgICBpZiAodXBkYXRlSW5mby5zY3JvbGxSZWN0
LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RzKQorICAgICAgICAgICAgZGFtYWdlUmVnaW9uLnVuaXRlKHJlY3QpOworICAg
IH0gZWxzZQorICAgICAgICBkYW1hZ2VSZWdpb24gPSBJbnRSZWN0KEludFBvaW50KCksIG1fd2Vi
UGFnZVByb3h5LnZpZXdTaXplKCkpOworICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdOZWVkc0Rp
c3BsYXkoZGFtYWdlUmVnaW9uKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OmRpc2Nh
cmRCYWNraW5nU3RvcmUoKQoreworICAgIG1fYmFja2luZ1N0b3JlID0gc3RkOjpudWxsb3B0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2MvRHJhd2luZ0FyZWFQcm94eVdDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE0N2MxMWNmNDczNzQ1NzEwYjM1
YWNjNzhlODY5ZDAyMmNkNDFiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJl
Z2lvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdBcmVhUHJveHlX
QyBmaW5hbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5n
QXJlYVByb3h5V0MoV2ViUGFnZVByb3h5JiwgV2ViUHJvY2Vzc1Byb3h5Jik7CisKKyAgICB2b2lk
IHBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBXZWJDb3JlOjpSZWdpb24mIHVucGFpbnRlZFJlZ2lvbik7CisKK3ByaXZh
dGU6CisgICAgLy8gRHJhd2luZ0FyZWFQcm94eQorICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JE
aWRDaGFuZ2UoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoKSBvdmVycmlk
ZTsKKyAgICAvLyBtZXNzYWdlIGhhbmRlcnMKKyAgICB2b2lkIHVwZGF0ZSh1aW50NjRfdCwgY29u
c3QgVXBkYXRlSW5mbyYpOworICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSh1aW50NjRfdCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOworCisgICAgdm9pZCBpbmNvcnBv
cmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdm9pZCBkaXNjYXJkQmFja2luZ1N0
b3JlKCk7CisKKyAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIHsgMCB9
OworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9Q
YWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMjIwODk4YzEyMmZjMzY4ZmM5NmMwNDY0ZGU0MGIxZWMx
YjVjMGQ1Yi4uYzc5NzA2YTEyNGI0NGMyZmYxM2I0ZDZhN2ZiZWM2M2FhZWFkYWIzOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKIAogI2luY2x1ZGUgIkRyYXdp
bmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eVdDLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5V2luLmgiCkBAIC00
Nyw2ICs0OCw4IEBAIFBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChXZWJWaWV3JiB2aWV3
KQogLy8gUGFnZUNsaWVudCdzIHB1cmUgdmlydHVhbCBmdW5jdGlvbnMKIHN0ZDo6dW5pcXVlX3B0
cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94
eShXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7CisgICAgaWYgKG1fdmlldy5wYWdlKCktPnBy
ZWZlcmVuY2VzKCkudXNlR1BVUHJvY2Vzc0ZvcldlYkdMRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVByb3h5V0M+KCptX3ZpZXcucGFnZSgpLCBwcm9jZXNz
KTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFw
aGljcz4oKm1fdmlldy5wYWdlKCksIHByb2Nlc3MpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5jcHAKaW5kZXggMWRmZjRjYzY4M2VhNDViMGJlZTIwZTA2MDk1MTZjMTM3
NzNmMGIxNS4uMGM3ZjQwY2I0OWZmMTA3MWMxOGEzODBkNjM0NjhlNmM4OGZkNTQ5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlXQy5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgpAQCAtNDkxLDMxICs0OTIsNDMg
QEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Bh
Z2UtPmVuZFByaW50aW5nKCk7Ci0gICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nh
c3Q8RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MqPihtX3BhZ2UtPmRyYXdpbmdB
cmVhKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVj
dCBjb2FsZXNjaW5nIGxvZ2ljIGhlcmUuCi0gICAgICAgIFJlZ2lvbiB1bnBhaW50ZWRSZWdpb247
CisgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkgeworICAgICAgICBhdXRvIHBhaW50ZXIg
PSBbJl0oYXV0byBkcmF3aW5nQXJlYSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2NpbmcgbG9naWMgaGVyZS4KKyAgICAgICAgICAg
IFJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CiAjaWYgVVNFKENBSVJPKQotICAgICAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb193aW4zMl9zdXJmYWNlX2NyZWF0ZShoZGMpOwotICAg
ICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwotCi0gICAgICAg
IGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRlZFJlZ2lvbik7
Ci0KLSAgICAgICAgY2Fpcm9fZGVzdHJveShjb250ZXh0KTsKLSAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KHN1cmZhY2UpOwotI2Vsc2UKLSAgICAgICAgQ09NUHRyPElEM0QxMVRleHR1cmUy
RD4gYmFja0J1ZmZlcjsgCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVm
ZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmYmFja0J1ZmZlcikpOyAKLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAgICAg
ICAgIEJhY2tpbmdTdG9yZTo6RFhDb25uZWN0aW9ucyBjb250ZXh0IHsgbV9pbW1lZGlhdGVDb250
ZXh0LmdldCgpLCBiYWNrQnVmZmVyLmdldCgpIH07CisgICAgICAgICAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UgPSBjYWlyb193aW4zMl9zdXJmYWNlX2NyZWF0ZShoZGMpOworICAgICAgICAg
ICAgY2Fpcm9fdCogY29udGV4dCA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAgICAKICAgICAg
ICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRlZFJl
Z2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsg
CisgICAgCisgICAgICAgICAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOworICAgICAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworI2Vsc2UKKyAgICAgICAgICAgIENPTVB0
cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAorICAgICAgICAgICAgSFJFU1VMVCBociA9
IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAorICAgICAgICAgICAgaWYgKFNV
Q0NFRURFRChocikpIHsKKyAgICAgICAgICAgICAgICBCYWNraW5nU3RvcmU6OkRYQ29ubmVjdGlv
bnMgY29udGV4dCB7IG1faW1tZWRpYXRlQ29udGV4dC5nZXQoKSwgYmFja0J1ZmZlci5nZXQoKSB9
OworICAgICAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3Qs
IHVucGFpbnRlZFJlZ2lvbik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBtX3N3
YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsgCiAjZW5kaWYKLQotICAgICAgICBhdXRvIHVucGFpbnRl
ZFJlY3RzID0gdW5wYWludGVkUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVj
dCA6IHVucGFpbnRlZFJlY3RzKQotICAgICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGhkYywg
bV9wYWdlLmdldCgpLCByZWN0KTsKKyAgICAKKyAgICAgICAgICAgIGF1dG8gdW5wYWludGVkUmVj
dHMgPSB1bnBhaW50ZWRSZWdpb24ucmVjdHMoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVj
dCA6IHVucGFpbnRlZFJlY3RzKQorICAgICAgICAgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZCho
ZGMsIG1fcGFnZS5nZXQoKSwgcmVjdCk7CisgICAgICAgIH07CisgICAgICAgIHN3aXRjaCAobV9w
YWdlLT5kcmF3aW5nQXJlYSgpLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYVR5
cGU6OldDOgorICAgICAgICAgICAgcGFpbnRlcihzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5
V0MqPihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0ZWRHcmFwaGljczoKKyAgICAgICAgICAg
IHBhaW50ZXIoc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3Mq
PihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KICAg
ICB9IGVsc2UKICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGhkYywgbV9wYWdlLmdldCgpLCBk
aXJ0eVJlY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAK
aW5kZXggMzFkNzlmOWYxZDMwYzliNTIxNmJmNTY1NThiMWE2NDI5NTg4MDNmMS4uODkzNWRhYmJi
ZDJmNWQ0YzQyZjEwNTNmNTZhNzAwNTYxZGNkNzk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHkuY3BwCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaD4KICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgPFdlYkNvcmUvV0NQbGF0Zm9ybUxheWVy
R0NHTC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTYyLDYgKzY2LDkgQEAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eShHUFVQcm9jZXNzQ29ubmVjdGlvbiYKICAgICAv
LyBUT0RPOiBXZSBtdXN0IHdhaXQgdW50aWwgaW5pdGlhbGl6ZWQsIGJlY2F1c2UgYXQgdGhlIG1v
bWVudCB3ZSBjYW5ub3QgcmVjZWl2ZSBJUEMgbWVzc2FnZXMKICAgICAvLyBkdXJpbmcgd2FpdCB3
aGlsZSBpbiBzeW5jaHJvbm91cyBzdHJlYW0gc2VuZC4gU2hvdWxkIGJlIGZpeGVkIGFzIHBhcnQg
b2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzIxMS4KICAgICB3
YWl0VW50aWxJbml0aWFsaXplZCgpOworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBz
dGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4ocGxhdGZvcm1MYXllcigpKS0+c2V0R3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRv
VUludDY0KCkpOworI2VuZGlmCiB9CiAKIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6On5S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzM3MWRkOTg4ODMwYjAzMDhiNGRiZWZiM2Y1
MzM2MTVhMDhjOTczNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAg
KzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUg
IlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5j
bHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eShXZWJQYWdlJiBwYWdlLCBDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdl
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eTo6flJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBkaXNjb25uZWN0R3B1
UHJvY2Vzc0lmTmVlZGVkKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gJmNvbnN0X2Nhc3Q8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkmPigqdGhpcykuZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK0dQVVByb2Nlc3NDb25u
ZWN0aW9uJiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKQoreworICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikgeworICAgICAgICBh
dXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFk
ZENsaWVudCgqdGhpcyk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNl
aXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmll
cigpLnRvVUludDY0KCksICp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29u
bmVjdGlvbigpLnNlbmQoCisgICAgICAgICAgICBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q3JlYXRlV0NMYXllclRyZWVIb3N0KHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIo
KSwgbV9wYWdlLm5hdGl2ZVdpbmRvd0hhbmRsZSgpKSwKKyAgICAgICAgICAgIDAsIElQQzo6U2Vu
ZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAg
ICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbiA9IGdwdVByb2Nlc3NDb25uZWN0aW9uOworICAg
IH0KKyAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgUmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk6OmRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKQorewor
ICAgIGlmIChhdXRvIGdwdVByb2Nlc3NDb25uZWN0aW9uID0gc3RkOjpleGNoYW5nZShtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uLCBudWxscHRyKSkgeworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlv
bi0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVI
b3N0SWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlJlbGVhc2VXQ0xheWVyVHJlZUhvc3Qod2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpKSwgMCwg
SVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkpOworICAgIH0KK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Z3B1UHJv
Y2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYgcHJldmlvdXNDb25u
ZWN0aW9uKQoreworICAgIHByZXZpb3VzQ29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKnRoaXMpOwor
ICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCkp
OworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRyOworfQorCit1aW50NjRfdCBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdAoreworICAgIHJldHVybiB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQo
KTsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlKFdDVXBhdGVJ
bmZvJiYgdXBkYXRlSW5mbykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3Q6OlVwZGF0ZSh1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6OmRpZFVwZGF0ZSgpCit7CisgICAgbV9jbGllbnQuZGlkVXBkYXRlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9S
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3
OGQ4Y2IwYTI3YTNmZmQ1NmYyMDdkYTJkZmFiMTNkMjRlNGE2NWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIkdQVVByb2Nl
c3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXQ1VwYXRlSW5mbzsKKworY2xhc3MgUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIEdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KTsKK3B1
YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFVwZGF0ZSgpID0gMDsKKyAgICB9OworCisgICAgUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHkoV2ViUGFnZSYsIENsaWVudCYpOworICAgIH5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eSgpOworCisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJik7CisKKyAgICB2b2lkIGRpZFVw
ZGF0ZSgpOworCitwcml2YXRlOgorICAgIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgd2NMYXll
clRyZWVIb3N0SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2NMYXllclRyZWVIb3N0SWRl
bnRpZmllcjsgfTsKKyAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbiYgZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKTsKKwor
ICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nlc3ND
b25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKKworICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlcgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBj
b25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxHUFVQcm9jZXNzQ29ubmVjdGlvbj4gbV9n
cHVQcm9jZXNzQ29ubmVjdGlvbjsKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1fd2NM
YXllclRyZWVIb3N0SWRlbnRpZmllciB7IFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXI6OmdlbmVy
YXRlKCkgfTsKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgQ2xpZW50JiBtX2NsaWVudDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY4YWY3N2EzMTE2MTdlNzI4MWVjYmNkMzYyMGRhMjJmNjk3
MzZlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IFVTRShHUkFQSElDU19MQVlFUl9XQykKKworbWVzc2FnZXMgLT4gUmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgRGlkVXBkYXRlKCkKK30KKworI2VuZGlmIC8v
IFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlm
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGRiYTA1ZTE1NWY4ZTRkZmU2MGM5YTQ4MmM5OTRkYzljYjVlNTkw
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2lu
Y2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitl
bnVtIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFdDTGF5ZXJUcmVl
SG9zdElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5jcHAKaW5kZXggYTUzNDQwN2QwMzY2NzYxYWNhY2U5ZDg4NDliOGZjYWMyYmUzNWVm
ZS4uZDFkMmRiOGMwZjFkY2IwMzM3NTNiOWY0NWZmODY5ODRhNzg5MDA5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcApAQCAtNDAsNiAr
NDAsOSBAQAogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9N
QVBQRVIpCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmgiCiAjZW5k
aWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFXQy5o
IgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC01Nyw2ICs2MCwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWE+IERyYXdpbmdB
cmVhOjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZQogI2VsaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgY2FzZSBEcmF3
aW5nQXJlYVR5cGU6OkNvb3JkaW5hdGVkR3JhcGhpY3M6CiAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPERyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcz4od2ViUGFnZSwgcGFyYW1ldGVycyk7
CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgY2FzZSBEcmF3aW5nQXJl
YVR5cGU6OldDOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYVdDPih3ZWJQ
YWdlLCBwYXJhbWV0ZXJzKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTA4LDYgKzExNSwxMCBAQCBi
b29sIERyYXdpbmdBcmVhOjpzdXBwb3J0c0dQVVByb2Nlc3NSZW5kZXJpbmcoRHJhd2luZ0FyZWFU
eXBlIHR5cGUpCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJF
X01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0ZWRHcmFwaGljczoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAj
ZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA1ZTBiOTc1OWM2Y2Nl
MDExNjliZTRlNzZjZjhlZGU5OGZjNTdjYjliLi4yOWQ5OWFhZjk1MmI3MzFlOWIwMjM1YWExMTNh
Y2FlOGQ5ZDVmZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhLmgKQEAgLTEzNiw2ICsxMzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVHZW9tZXRyeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgYm9vbCBm
bHVzaFN5bmNocm9ub3VzbHksIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgZmVuY2VQb3J0KSB7
IH0KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkgeyB9OworI2VuZGlm
CisKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShHUkFQSElDU19MQVlFUl9U
RVhUVVJFX01BUFBFUikKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMo
KSB7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgppbmRleCA5ZDVmNmRjYTZlMzhjNTBkZWE1Mzdl
OWUxZDVmNTRhYmEzZjc0NjdiLi5iMTk2YTlmMDVkMjQ0YWRhMDMwMTNjN2E3YjE0MjNjZGY4NDA3
ZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAtNDAsNiArNDAsMTAgQEAgbWVzc2FnZXMgLT4gRHJh
d2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisgICAgVXBkYXRlR2VvbWV0cnkodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJ
RCwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBBZGp1c3RUcmFuc2llbnRab29tKGRvdWJsZSBzY2Fs
ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgQ29tbWl0VHJhbnNpZW50Wm9vbShk
b3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNjJmNzQ3Njc1ZTNjNmRhMmY2YWVjYTEwMGJmMjk1MjM5NTY5ZTQzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFX
Qy5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhV0MuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworRHJhd2luZ0FyZWFXQzo6RHJh
d2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlOjpXQywg
cGFyYW1ldGVycy5kcmF3aW5nQXJlYUlkZW50aWZpZXIsIHdlYlBhZ2UpCisgICAgLCBtX3Jvb3RM
YXllckNsaWVudCh3ZWJQYWdlKQorICAgICwgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSht
YWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlLCAqdGhpcykpCisg
ICAgLCBtX2xheWVyRmFjdG9yeSgqdGhpcykKKyAgICAsIG1fcm9vdExheWVyKEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzLT5tX3Jvb3RMYXllckNsaWVu
dCkpCisgICAgLCBtX3VwZGF0ZVJlbmRlcmluZ1RpbWVyKCp0aGlzLCAmRHJhd2luZ0FyZWFXQzo6
dXBkYXRlUmVuZGVyaW5nKQorICAgICwgbV9jb21taXRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
RHJhd2luZ0FyZWFXQyBDb21taXRRdWV1ZSJfcykpCit7CisgICAgbV9yb290TGF5ZXItPnNldE5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRyYXdpbmcgYXJlYSByb290IikpOworICAgIG1f
cm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9yb290TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS5z
aXplKCkpOworICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworRHJhd2lu
Z0FyZWFXQzo6fkRyYXdpbmdBcmVhV0MoKQoreworICAgIHdoaWxlIChhdXRvIGxheWVyID0gbV9s
aXZlR3JhcGhpY3NMYXllcnMucmVtb3ZlSGVhZCgpKQorICAgICAgICBsYXllci0+Y2xlYXJPYnNl
cnZlcigpOworfQorCitHcmFwaGljc0xheWVyRmFjdG9yeSogRHJhd2luZ0FyZWFXQzo6Z3JhcGhp
Y3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiAmbV9sYXllckZhY3Rvcnk7Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9vdExheWVycygpCit7CisgICAgVmVjdG9yPFJlZjxH
cmFwaGljc0xheWVyPj4gY2hpbGRyZW47CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAg
ICAgIGNoaWxkcmVuLmFwcGVuZCgqbV9jb250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqbV92aWV3T3Zl
cmxheVJvb3RMYXllcik7CisgICAgfQorICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihXVEZN
b3ZlKGNoaWxkcmVuKSk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworfQorCit2b2lk
IERyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJv
b3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVS
b290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6YXR0YWNoVmlld092ZXJsYXlH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXIgPSBsYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFXQzo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sIGlzRnJvemVuKQorewor
ICAgIGlmIChtX2lzUmVuZGVyaW5nU3VzcGVuZGVkID09IGlzRnJvemVuKQorICAgICAgICByZXR1
cm47CisgICAgbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9IGlzRnJvemVuOworICAgIGlmICghbV9p
c1JlbmRlcmluZ1N1c3BlbmRlZCAmJiBtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlKSB7Cisg
ICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdHJp
Z2dlclJlbmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp1
cGRhdGVHZW9tZXRyeSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBJbnRTaXplIHZpZXdT
aXplKQoreworICAgIG1fYmFja2luZ1N0b3JlU3RhdGVJRCA9IGJhY2tpbmdTdG9yZVN0YXRlSUQ7
CisgICAgbV93ZWJQYWdlLnNldFNpemUodmlld1NpemUpOworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS5zaXplKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlZ2lvbiA9IHsgfTsKKyAgICBtX3Njcm9sbFJlY3Qg
PSB7IH07CisgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07CisgICAgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KG1fd2ViUGFnZS5ib3VuZHMoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGlzQ29tcG9z
aXRpbmdNb2RlKCkpCisgICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHJlY3QpOworICAg
IHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzY3Jv
bGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEp
Cit7CisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAgIG1fcm9vdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Nyb2xsUmVjdCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChzY3JvbGxSZWN0ICE9IG1fc2Nyb2xsUmVjdCkgeworICAgICAgICAgICAgLy8gSnVzdCByZXBh
aW50IHRoZSBlbnRpcmUgY3VycmVudCBzY3JvbGwgcmVjdCwgd2UnbGwgc2Nyb2xsIHRoZSBuZXcg
cmVjdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fc2Nyb2xs
UmVjdCk7CisgICAgICAgICAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgICAgICAgICBtX3Nj
cm9sbE9mZnNldCA9IHsgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgdGhlIHBhcnQgb2Yg
dGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGluIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAgICAgUmVn
aW9uIGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHNjcm9sbFJlY3QsIG1fZGly
dHlSZWdpb24pOworICAgICAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHBhcnRzIG9mIHRoZSBkaXJ0eSByZWdpb24g
dGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gc3VidHJhY3QgdGhlbSBmcm9tIHRoZSByZWdpb24sIG1vdmUgdGhlbSBhbmQgcmUtYWRkIHRo
ZW0uCisgICAgICAgICAgICBtX2RpcnR5UmVnaW9uLnN1YnRyYWN0KHNjcm9sbFJlY3QpOworICAg
ICAgICAgICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMuCisgICAgICAgICAgICBSZWdpb24gbW92
ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdCh0cmFuc2xhdGUoZGlydHlSZWdp
b25JblNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSwgc2Nyb2xsUmVjdCk7CisgICAgICAgICAgICAv
LyBBbmQgYWRkIHRoZW0gYmFjay4KKyAgICAgICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUobW92
ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgorICAgICAgICBSZWdpb24gc2Nyb2xsUmVwYWlu
dFJlZ2lvbiA9IHN1YnRyYWN0KHNjcm9sbFJlY3QsIHRyYW5zbGF0ZShzY3JvbGxSZWN0LCBzY3Jv
bGxEZWx0YSkpOworICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNjcm9sbFJlcGFpbnRSZWdp
b24pOworICAgICAgICBtX3Njcm9sbFJlY3QgPSBzY3JvbGxSZWN0OworICAgICAgICBtX3Njcm9s
bE9mZnNldCArPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgp
OworICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp0cmlnZ2VyUmVuZGVyaW5nVXBkYXRl
KCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCB8fCBtX3dhaXREaWRVcGRhdGUp
IHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IHRydWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fdXBkYXRlUmVuZGVyaW5nVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdXBkYXRlUmVuZGVyaW5nVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMoV0NVcGF0
ZUluZm8mIGluZm8pCit7CisgICAgZm9yIChhdXRvJiBsYXllckluZm8gOiBpbmZvLmNoYW5nZWRM
YXllcnMpIHsKKyAgICAgICAgaWYgKGxheWVySW5mby5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGxheWVySW5mby5i
YWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGZs
dXNoZXIgPSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQorICAgICAgICAgICAgICAgICAgICBmbHVz
aGVyLT5mbHVzaCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitib29s
IERyYXdpbmdBcmVhV0M6OmlzQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAgICByZXR1cm4gbV9jb250
ZW50TGF5ZXI7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUmVuZGVyaW5nKCkKK3sK
KyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCkgeworICAgICAgICBtX2hhc0RlZmVycmVk
UmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlZW50cmFudCwgZS5nLiBhIHJBRiBjYWxsYmFjayBtYXkg
Zm9yY2UgcmVwYWludC4KKyAgICBpZiAobV9pblVwZGF0ZVJlbmRlcmluZykKKyAgICAgICAgcmV0
dXJuOworICAgIFNldEZvclNjb3BlPGJvb2w+IGNoYW5nZShtX2luVXBkYXRlUmVuZGVyaW5nLCB0
cnVlKTsKKworICAgIEFTU0VSVCghbV93YWl0RGlkVXBkYXRlKTsKKyAgICBtX3dhaXREaWRVcGRh
dGUgPSB0cnVlOworCisgICAgbV93ZWJQYWdlLnVwZGF0ZVJlbmRlcmluZygpOworICAgIG1fd2Vi
UGFnZS5mbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOworCisgICAgT3B0aW9uU2V0PEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdzOworICAgIG1fd2ViUGFnZS5maW5hbGl6
ZVJlbmRlcmluZ1VwZGF0ZShmbGFncyk7CisgICAgbV93ZWJQYWdlLmRpZFVwZGF0ZVJlbmRlcmlu
ZygpOworCisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAgIHNlbmRVcGRhdGVB
QygpOworICAgIGVsc2UKKyAgICAgICAgc2VuZFVwZGF0ZU5vbkFDKCk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFXQzo6c2VuZFVwZGF0ZUFDKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgLy8gQmVjYXVzZSBvdXIgdmll
dy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBGcmFt
ZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHku
CisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh7IH0pOworCisgICAgbV91cGRhdGVJbmZv
LnJvb3RMYXllciA9IG1fcm9vdExheWVyLT5wcmltYXJ5TGF5ZXJJRCgpOworCisgICAgbV9jb21t
aXRRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0cigqdGhpcyksIHVwZGF0
ZUluZm8gPSBzdGQ6OmV4Y2hhbmdlKG1fdXBkYXRlSW5mbywgeyB9KV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgZmx1c2hMYXllckltYWdlQnVmZmVycyh1cGRhdGVJbmZvKTsKKyAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB1
cGRhdGVJbmZvID0gV1RGTW92ZSh1cGRhdGVJbmZvKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9y
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlKFdURk1vdmUodXBkYXRlSW5mbykpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCb3VuZHNS
ZWN0KGNvbnN0IEludFJlY3QmIGJvdW5kcywgY29uc3QgVmVjdG9yPEludFJlY3QsIDE+JiByZWN0
cykKK3sKKyAgICBjb25zdCBzaXplX3QgcmVjdFRocmVzaG9sZCA9IDEwOworICAgIGNvbnN0IGRv
dWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzU7CisKKyAgICBpZiAocmVjdHMuc2l6ZSgp
IDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4gcmVjdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgLy8gQXR0ZW1wdCB0byBndWVzcyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNl
IHRoZSByZWdpb24gYm91bmRzIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwgcmVjdHMuCisgICAgLy8g
V2UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIg
aW4gdGhlIGJvdW5kcy4gSWYgdGhhdCB3YXN0ZWQgc3BhY2UKKyAgICAvLyBpcyB0b28gbGFyZ2Us
IHRoZW4gd2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJlY3QgcGFpbnRpbmcgaW5zdGVhZC4KKyAgICB1
bnNpZ25lZCBib3VuZHNBcmVhID0gYm91bmRzLndpZHRoKCkgKiBib3VuZHMuaGVpZ2h0KCk7Cisg
ICAgdW5zaWduZWQgcmVjdHNBcmVhID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
Y3RzLnNpemUoKTsgKytpKQorICAgICAgICByZWN0c0FyZWEgKz0gcmVjdHNbaV0ud2lkdGgoKSAq
IHJlY3RzW2ldLmhlaWdodCgpOworCisgICAgZG91YmxlIHdhc3RlZFNwYWNlID0gMSAtIChzdGF0
aWNfY2FzdDxkb3VibGU+KHJlY3RzQXJlYSkgLyBib3VuZHNBcmVhKTsKKyAgICByZXR1cm4gd2Fz
dGVkU3BhY2UgPD0gd2FzdGVkU3BhY2VUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFX
Qzo6c2VuZFVwZGF0ZU5vbkFDKCkKK3sKKyAgICBpZiAobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZGlkVXBkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSW50
UmVjdCBib3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOworICAgIEFTU0VSVChtX3dlYlBh
Z2UuYm91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplID0g
Ym91bmRzLnNpemUoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGJpdG1hcFNpemUuc2NhbGUoZGV2
aWNlU2NhbGVGYWN0b3IpOworCisgICAgYXV0byBpbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyKGJp
dG1hcFNpemUpOworICAgIGF1dG8gcmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAg
aWYgKHNob3VsZFBhaW50Qm91bmRzUmVjdChib3VuZHMsIHJlY3RzKSkgeworICAgICAgICByZWN0
cy5jbGVhcigpOworICAgICAgICByZWN0cy5hcHBlbmQoYm91bmRzKTsKKyAgICB9CisgICAgbV9k
aXJ0eVJlZ2lvbiA9IHsgfTsKKworICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB1cGRh
dGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKKyAgICB1cGRhdGVJbmZvLmRldmlj
ZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gYm91bmRzOworICAgIHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdHMgPSByZWN0czsKKyAgICB1cGRhdGVJbmZvLnNjcm9sbFJlY3QgPSBtX3Nj
cm9sbFJlY3Q7CisgICAgdXBkYXRlSW5mby5zY3JvbGxPZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsK
KyAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07CisKKyAg
ICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAgIGdyYXBoaWNz
Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBn
cmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCgpLCAtYm91bmRzLnkoKSk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCisgICAgICAgIG1fd2ViUGFnZS5kcmF3UmVj
dChpbWFnZS0+Y29udGV4dCgpLCByZWN0KTsKKyAgICBpbWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMg
PSBXZWFrUHRyKCp0aGlzKSwgc3RhdGVJRCA9IG1fYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRl
SW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFibGUgeworICAgICAgICBp
ZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNoZXIoKSkKKyAgICAgICAgICAgIGZs
dXNoZXItPmZsdXNoKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
d2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RhdGVJRCwgdXBkYXRlSW5mbyA9IFdURk1v
dmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoc3RhdGVJRCAh
PSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpIHsKKyAgICAgICAgICAgICAgICBkaWRVcGRhdGUoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJh
Y2tlbmQmPigqaW1hZ2UtPmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpLmNyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgdXBkYXRlSW5mby5iaXRtYXBIYW5kbGUgPSBz
dGQ6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRsZT4oV1RGTW92ZShoYW5kbGUpKTsKKyAgICAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlVwZGF0ZShzdGF0ZUlELCBX
VEZNb3ZlKHVwZGF0ZUluZm8pKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIERy
YXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xheWVyV0MmIGxheWVyKQor
eworICAgIG1fbGl2ZUdyYXBoaWNzTGF5ZXJzLmFwcGVuZCgmbGF5ZXIpOworICAgIG1fdXBkYXRl
SW5mby5hZGRlZExheWVycy5hcHBlbmQobGF5ZXIucHJpbWFyeUxheWVySUQoKSk7Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6Z3JhcGhpY3NMYXllclJlbW92ZWQoR3JhcGhpY3NMYXllcldDJiBs
YXllcikKK3sKKyAgICBtX2xpdmVHcmFwaGljc0xheWVycy5yZW1vdmUoJmxheWVyKTsKKyAgICBt
X3VwZGF0ZUluZm8ucmVtb3ZlZExheWVycy5hcHBlbmQobGF5ZXIucHJpbWFyeUxheWVySUQoKSk7
Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVw
YXRlSW5mbyYmIGluZm8pCit7CisgICAgbV91cGRhdGVJbmZvLmNoYW5nZWRMYXllcnMuYXBwZW5k
KFdURk1vdmUoaW5mbykpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXI+IERyYXdpbmdBcmVhV0M6
OmNyZWF0ZUltYWdlQnVmZmVyKEZsb2F0U2l6ZSBzaXplKQoreworICAgIGlmIChXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zaG91bGRVc2VSZW1vdGVSZW5kZXJpbmdGb3IoUmVuZGVyaW5nUHVycG9z
ZTo6RE9NKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS5lbnN1cmVSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKKyAgICByZXR1cm4gQ29uY3JldGVJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjo6Y3JlYXRlKHNpemUsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgsIG51bGxwdHIpOworfQorCit2b2lk
IERyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSgpCit7CisgICAgbV93YWl0RGlkVXBkYXRlID0gZmFs
c2U7CisgICAgaWYgKG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUpIHsKKyAgICAgICAgbV9o
YXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNlOworICAgICAgICB0cmlnZ2VyUmVuZGVy
aW5nVXBkYXRlKCk7CisgICAgfQorfQorCitEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6
OlJvb3RMYXllckNsaWVudChXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBh
Z2UpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpwYWludENv
bnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKQor
eworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuY2xpcChyZWN0VG9QYWludCk7Cisg
ICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cGFpbnQoY29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWludCkpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OworfQorCitmbG9hdCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OmRldmljZVNjYWxl
RmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg3MjE3MmRmMmI2MDNlZGNkMDIxZTYyNmJkYjZkZDdhODMzNzEyYjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdD
LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJEcmF3aW5nQXJlYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiV0NMYXllckZh
Y3RvcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRHJh
d2luZ0FyZWFXQyBmaW5hbAorICAgIDogcHVibGljIERyYXdpbmdBcmVhCisgICAgLCBwdWJsaWMg
R3JhcGhpY3NMYXllcldDOjpPYnNlcnZlcgorICAgICwgcHVibGljIFJlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5OjpDbGllbnQgeworcHVibGljOgorICAgIERyYXdpbmdBcmVhV0MoV2ViUGFnZSYs
IGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKKyAgICB+RHJhd2luZ0FyZWFXQygp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
Y3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZm9yY2VSZXBhaW50QXN5
bmMoV2ViUGFnZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRD
aGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJy
aWRlOworICAgIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1faXNSZW5kZXJpbmdTdXNwZW5kZWQ7IH0KKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5
KHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRTaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJvb3RD
b21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2
b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGU7CisgICAgLy8gR3JhcGhpY3NMYXllcldDOjpPYnNlcnZlcgorICAgIHZvaWQg
Z3JhcGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92ZXJyaWRlOworICAgIHZvaWQg
Z3JhcGhpY3NMYXllclJlbW92ZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpIG92ZXJyaWRlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
RmxvYXRTaXplKSBvdmVycmlkZTsKKyAgICAvLyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6
Q2xpZW50CisgICAgdm9pZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNDb21w
b3NpdGluZ01vZGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZygpOworICAgIHZvaWQgc2Vu
ZFVwZGF0ZUFDKCk7CisgICAgdm9pZCBzZW5kVXBkYXRlTm9uQUMoKTsKKyAgICB2b2lkIHVwZGF0
ZVJvb3RMYXllcnMoKTsKKworICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJvb3RMYXll
ckNsaWVudChXZWJQYWdlJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgICAgIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsK
KyAgICB9OworCisgICAgUm9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eT4gbV9yZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eTsKKyAgICBXQ0xheWVyRmFjdG9yeSBtX2xheWVyRmFjdG9yeTsKKyAgICBE
b3VibHlMaW5rZWRMaXN0PEdyYXBoaWNzTGF5ZXJXQz4gbV9saXZlR3JhcGhpY3NMYXllcnM7Cisg
ICAgV2ViQ29yZTo6VGltZXIgbV91cGRhdGVSZW5kZXJpbmdUaW1lcjsKKyAgICBib29sIG1faXNS
ZW5kZXJpbmdTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNEZWZlcnJlZFJlbmRl
cmluZ1VwZGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2luVXBkYXRlUmVuZGVyaW5nIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fd2FpdERpZFVwZGF0ZSB7IGZhbHNlIH07CisgICAgV0NVcGF0ZUlu
Zm8gbV91cGRhdGVJbmZvOworICAgIFJlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RM
YXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9jb250ZW50TGF5ZXI7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5
ZXI7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV9jb21taXRRdWV1ZTsKKyAgICBpbnQ2NF90IG1fYmFj
a2luZ1N0b3JlU3RhdGVJRCB7IDAgfTsKKyAgICBXZWJDb3JlOjpSZWdpb24gbV9kaXJ0eVJlZ2lv
bjsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc2Nyb2xsUmVjdDsKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2Nyb2xsT2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldD
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xY2FiMWQwNjBkMTgyMTU1N2ZlM2JlMmFjYWQ1ZWVmNWVmOTgyN2I1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
R3JhcGhpY3NMYXllcldDLmNwcApAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dDUGxhdGZvcm1M
YXllckdDR0wuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworR3JhcGhpY3NMYXllcldDOjpHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5cGUsIEdy
YXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwgT2JzZXJ2ZXImIG9ic2VydmVyKQorICAgIDogR3Jh
cGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKKyAgICAsIG1fb2JzZXJ2ZXIoJm9ic2VydmVy
KQoreworICAgIG1fb2JzZXJ2ZXItPmdyYXBoaWNzTGF5ZXJBZGRlZCgqdGhpcyk7Cit9CisKK0dy
YXBoaWNzTGF5ZXJXQzo6fkdyYXBoaWNzTGF5ZXJXQygpCit7CisgICAgd2lsbEJlRGVzdHJveWVk
KCk7CisgICAgaWYgKG1fb2JzZXJ2ZXIpCisgICAgICAgIG1fb2JzZXJ2ZXItPmdyYXBoaWNzTGF5
ZXJSZW1vdmVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdy
YXBoaWNzTGF5ZXJXQzo6Z2VuZXJhdGVMYXllcklEKCkKK3sKKyAgICAvLyAwIGFuZCBtYXggY2Fu
J3QgYmUgdXNlZCBmb3IgaGFzaCBrZXlzCisgICAgc3RhdGljIEdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRCBpZCA9IDE7CisgICAgcmV0dXJuIGlkKys7Cit9CisKK0dyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCBHcmFwaGljc0xheWVyV0M6OnByaW1hcnlMYXllcklEKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllcklEOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1
cm47CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdT
dG9yZSk7CisgICAgYWRkUmVwYWludFJlY3QoeyB7IH0sIG1fc2l6ZSB9KTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QsIFNob3VsZENsaXBUb0xheWVyKQoreworICAgIGlmICghZHJhd3NDb250ZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50UmVjdChyZWN0KTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICAv
LyBGb3IgZXhhbXBsZSwgaWYgV2ViR0wgY2FudmFzIGNoYW5nZWQsIGl0IG5lZWRzIGZsdXNoIHRv
IGRpc3BsYXkuCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKHsgfSk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYm
IGNoaWxkcmVuKQoreworICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgIGlmIChjaGlsZHJlbkNoYW5nZWQp
CisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJl
bik7CisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OmFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIpCit7CisgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZExheWVyKSk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGlsZExh
eWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KFdU
Rk1vdmUoY2hpbGRMYXllciksIGluZGV4KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRk
Q2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVy
KiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coV1RGTW92ZShj
aGlsZExheWVyKSwgc2libGluZyk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5
ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxk
QWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXllciwgR3JhcGhpY3NMYXllciogc2li
bGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKFdURk1vdmUoY2hpbGRM
YXllciksIHNpYmxpbmcpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hh
bmdlOjpDaGlsZHJlbik7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpyZXBsYWNlQ2hpbGQo
R3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGljc0xheWVyPiYmIG5ld0NoaWxkKQor
eworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIFdURk1vdmUo
bmV3Q2hpbGQpKSkgeworICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6Q2hpbGRyZW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6cmVtb3ZlRnJvbVBhcmVudCgpCit7
CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyV0Mq
PihtX3BhcmVudCktPm5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGls
ZHJlbik7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xheWVyPiYmIGxh
eWVyKQoreworICAgIGlmIChsYXllciA9PSBtX21hc2tMYXllcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihXVEZNb3ZlKGxheWVyKSk7CisgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYXRlZExheWVyKQorICAgICAgICByZXR1
cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZExheWVyKGxheWVyKTsKKyAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0ZWRCeUxheWVyKFJlZlB0cjxHcmFw
aGljc0xheWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX3JlcGxpY2FMYXllcikK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVy
KFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNo
YW5nZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9PSBtX3Bvc2l0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocG9p
bnQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRy
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocG9pbnQpOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3sKKyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCb3Vu
ZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luKQoreworICAgIGlmIChvcmlnaW4gPT0g
bV9ib3VuZHNPcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRC
b3VuZHNPcmlnaW4ob3JpZ2luKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0ID09IHRyYW5z
Zm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3Jt
KHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zv
cm0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gY2hpbGRyZW5UcmFu
c2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
VHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpDaGlsZHJlblRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRQcmVz
ZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUp
OworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMz
RCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tzVG9Cb3VuZHMoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHModmFsdWUpOworICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldE9wYWNpdHkodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpPcGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRz
UmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50
c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6
OkNvbnRlbnRzUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c0Ns
aXBwaW5nUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gY29udGVudHNDbGlwcGluZ1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldENvbnRlbnRzVmlzaWJsZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSBjb250ZW50c0FyZVZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllcldDOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAgIG5vdGVMYXllclBy
b3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIGlmIChjb2xvciA9PSBtX3NvbGlkQ29sb3IpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3NvbGlkQ29sb3IgPSBjb2xvcjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6U29saWRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
LCBDb250ZW50c0xheWVyUHVycG9zZSkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyID09IHBs
YXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBwbGF0
Zm9ybUxheWVyOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpQ
bGF0Zm9ybUxheWVyKTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnVzZXNDb250ZW50c0xh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykKK3sKKyAgICBpZiAo
aXNTaG93aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cpOworICAgIHVwZGF0ZURlYnVnSW5k
aWNhdG9ycygpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpE
ZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RGVidWdCb3JkZXIo
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKK3sKKyAgICBtX2RlYnVnQm9yZGVyQ29s
b3IgPSBjb2xvcjsKKyAgICBtX2RlYnVnQm9yZGVyV2lkdGggPSB3aWR0aDsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cpCit7Cisg
ICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihzaG93KTsKKyAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KTsKK30K
Kworc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQoreworICAgIGlmICghZmlsdGVycy5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbHRlck9wZXJhdGlvbiA6IGZpbHRlcnMu
b3BlcmF0aW9ucygpKSB7CisgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSA9PSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRGaWx0
ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgYm9vbCBjYW5Db21w
b3NpdGVGaWx0ZXJzID0gZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKKyAgICBpZiAo
R3JhcGhpY3NMYXllcjo6ZmlsdGVycygpID09IGZpbHRlcnMpCisgICAgICAgIHJldHVybiBjYW5D
b21wb3NpdGVGaWx0ZXJzOworCisgICAgaWYgKGNhbkNvbXBvc2l0ZUZpbHRlcnMpIHsKKyAgICAg
ICAgaWYgKCFHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoR3JhcGhpY3NMYXllcjo6ZmlsdGVycygpLnNp
emUoKSkKKyAgICAgICAgY2xlYXJGaWx0ZXJzKCk7CisKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoV0NMYXllckNoYW5nZTo6RmlsdGVycyk7CisgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZp
bHRlcnM7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZp
bHRlcnMgPSBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworICAgIGlmIChtX2JhY2tk
cm9wRmlsdGVycyA9PSBmaWx0ZXJzKQorICAgICAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVy
czsKKyAgICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6
c2V0QmFja2Ryb3BGaWx0ZXJzKGZpbHRlcnMpOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJCYWNr
ZHJvcEZpbHRlcnMoKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6QmFja2Ryb3BGaWx0ZXJzKTsKKyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgYmFja2Ryb3BGaWx0ZXJzUmVjdCkKK3sKKyAgICBpZiAobV9iYWNrZHJv
cEZpbHRlcnNSZWN0ID09IGJhY2tkcm9wRmlsdGVyc1JlY3QpCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGJhY2tkcm9wRmlsdGVyc1Jl
Y3QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJv
cEZpbHRlcnMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6bm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFncykKK3sKKyAgICBpZiAoYmVpbmdE
ZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgbmVlZHNGbHVzaCA9ICFtX3Vu
Y29tbWl0dGVkQ2hhbmdlczsKKyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcy5hZGQoZmxhZ3MpOwor
ICAgIGlmIChuZWVkc0ZsdXNoKQorICAgICAgICBjbGllbnQoKS5ub3RpZnlGbHVzaFJlcXVpcmVk
KHRoaXMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byogbWFzayA9IG1hc2tMYXll
cigpKQorICAgICAgICBtYXNrLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisgICAgaWYgKGF1dG8qIHJlcGxpY2EgPSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVw
bGljYS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxk
IDogY2hpbGRyZW4oKSkKKyAgICAgICAgY2hpbGQtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShyZWN0
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKQoreworICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMpCisgICAgICAg
IHJldHVybjsKKyAgICBXQ0xheWVyVXBhdGVJbmZvIHVwZGF0ZTsKKyAgICB1cGRhdGUuaWQgPSBw
cmltYXJ5TGF5ZXJJRCgpOworICAgIHVwZGF0ZS5jaGFuZ2VzID0gc3RkOjpleGNoYW5nZShtX3Vu
Y29tbWl0dGVkQ2hhbmdlcywgeyB9KTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICB1cGRhdGUuY2hpbGRyZW4gPSBXVEY6Om1hcChj
aGlsZHJlbigpLCBbXShhdXRvJiBsYXllcikgeworICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5w
cmltYXJ5TGF5ZXJJRCgpOworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6TWFza0xheWVyKSB7CisgICAgICAgIGlmIChtYXNrTGF5ZXIo
KSkKKyAgICAgICAgICAgIHVwZGF0ZS5tYXNrTGF5ZXIgPSBtYXNrTGF5ZXIoKS0+cHJpbWFyeUxh
eWVySUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLm1hc2tMYXllciA9IHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6UmVwbGljYUxheWVyKSB7CisgICAgICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAg
ICAgIHVwZGF0ZS5yZXBsaWNhTGF5ZXIgPSByZXBsaWNhTGF5ZXIoKS0+cHJpbWFyeUxheWVySUQo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXllciA9IHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
R2VvbWV0cnkpIHsKKyAgICAgICAgdXBkYXRlLnBvc2l0aW9uID0gcG9zaXRpb24oKTsKKyAgICAg
ICAgdXBkYXRlLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICAgICAgdXBkYXRlLnNp
emUgPSBzaXplKCk7CisgICAgICAgIHVwZGF0ZS5ib3VuZHNPcmlnaW4gPSBib3VuZHNPcmlnaW4o
KTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJlc2Vy
dmVzM0QpCisgICAgICAgIHVwZGF0ZS5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KQorICAgICAg
ICB1cGRhdGUuY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgaWYgKHVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpCisgICAgICAgIHVw
ZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCA9IGNvbnRlbnRzQ2xpcHBpbmdSZWN0KCk7CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAg
ICAgICB1cGRhdGUuY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAg
aWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQor
ICAgICAgICB1cGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7
CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykK
KyAgICAgICAgdXBkYXRlLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgaWYg
KHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAg
IGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZpc2libGUoKSAmJiAhc2l6ZSgpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBpbWFnZSA9IG1fb2JzZXJ2ZXItPmNyZWF0ZUlt
YWdlQnVmZmVyKHNpemUoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSB7IHsg
fSwgc2l6ZSgpIH07CisgICAgICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhpbWFn
ZS0+Y29udGV4dCgpLCBjbGlwUmVjdCk7CisgICAgICAgICAgICBpbWFnZS0+Zmx1c2hEcmF3aW5n
Q29udGV4dEFzeW5jKCk7CisgICAgICAgICAgICB1cGRhdGUuYmFja2luZ1N0b3JlLnNldEltYWdl
QnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKworICAgICAgICAgICAgaW5jcmVtZW50UmVwYWludENv
dW50KCk7CisgICAgICAgICAgICB1cGRhdGUuY2hhbmdlcy5hZGQoV0NMYXllckNoYW5nZTo6UmVw
YWludENvdW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICB1cGRhdGUuc29saWRDb2xvciA9IG1f
c29saWRDb2xvcjsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1
Z1Zpc3VhbHMpIHsKKyAgICAgICAgdXBkYXRlLnNob3dEZWJ1Z0JvcmRlciA9IGlzU2hvd2luZ0Rl
YnVnQm9yZGVyKCk7CisgICAgICAgIHVwZGF0ZS5kZWJ1Z0JvcmRlckNvbG9yID0gbV9kZWJ1Z0Jv
cmRlckNvbG9yOworICAgICAgICB1cGRhdGUuZGVidWdCb3JkZXJXaWR0aCA9IG1fZGVidWdCb3Jk
ZXJXaWR0aDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
UmVwYWludENvdW50KSB7CisgICAgICAgIHVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIgPSBpc1No
b3dpbmdSZXBhaW50Q291bnRlcigpOworICAgICAgICB1cGRhdGUucmVwYWludENvdW50ID0gcmVw
YWludENvdW50KCk7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6Ok9wYWNpdHkpCisgICAgICAgIHVwZGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgdXBk
YXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgIHVwZGF0ZS5maWx0ZXJzID0gZmlsdGVy
cygpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmls
dGVycykgeworICAgICAgICB1cGRhdGUuYmFja2Ryb3BGaWx0ZXJzID0gYmFja2Ryb3BGaWx0ZXJz
KCk7CisgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0ID0gYmFja2Ryb3BGaWx0ZXJz
UmVjdCgpOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQ
bGF0Zm9ybUxheWVyKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCisgICAgICAgICAg
ICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8V0NQbGF0
Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPmdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyID0gMDsKKyAgICB9CisgICAgbV9vYnNlcnZlci0+Y29tbWl0TGF5ZXJVcGF0
ZUluZm8oV1RGTW92ZSh1cGRhdGUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVy
V0MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFiNWVjNDcwOTExMmU4ZDZhNWIxZTczZTQ3NTFkZGI4M2FkNzA0ZjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9H
cmFwaGljc0xheWVyV0MuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldD
VXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NM
YXllcldDPiB7CitwdWJsaWM6CisgICAgc3RydWN0IE9ic2VydmVyIHsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xheWVyV0MmKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBncmFwaGljc0xheWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJ
bmZvJiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+
IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkgPSAwOworICAgIH07CisKKyAg
ICBHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQmLCBPYnNlcnZlciYpOworICAgIH5HcmFwaGljc0xheWVyV0MoKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgY2xlYXJPYnNlcnZlcigpIHsgbV9vYnNlcnZlciA9IG51bGxwdHI7IH0KKworICAg
IC8vIEdyYXBoaWNzTGF5ZXIKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgcHJpbWFyeUxheWVySUQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFNob3VsZENsaXBUb0xheWVyKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRDaGls
ZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFk
ZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxk
QXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4mJiwgaW50IGluZGV4KSBvdmVycmlkZTsKKyAgICB2
b2lkIGFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYsIEdyYXBoaWNzTGF5ZXIqIHNp
YmxpbmcpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXll
cj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykgb3ZlcnJpZGU7CisgICAgYm9vbCByZXBsYWNl
Q2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGljc0xheWVyPiYmIG5ld0No
aWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldE1hc2tMYXllcihSZWZQdHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBz
ZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYpOworICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QW5jaG9y
UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
Qm91bmRzT3JpZ2luKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJv
b2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
Q29udGVudHNDbGlwcGluZ1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0Q29udGVudHNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2Zh
Y2VWaXNpYmlsaXR5KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNUb1NvbGlk
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRl
bnRzVG9QbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBDb250ZW50c0xheWVyUHVycG9zZSkg
b3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKFdlYkNvcmU6
OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHVzZXND
b250ZW50c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaG93RGVidWdCb3Jk
ZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBXZWJDb3Jl
OjpDb2xvciYsIGZsb2F0IHdpZHRoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dSZXBhaW50
Q291bnRlcihib29sKSBvdmVycmlkZTsKKyAgICBib29sIHNldEZpbHRlcnMoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAgIGJvb2wgc2V0QmFja2Ryb3BGaWx0
ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZvaWQg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPik7CisKKyAg
ICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGdlbmVyYXRlTGF5ZXJJRCgp
OworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NM
YXllcldDPjsKKworICAgIEdyYXBoaWNzTGF5ZXJXQyogbV9wcmV2OworICAgIEdyYXBoaWNzTGF5
ZXJXQyogbV9uZXh0OworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBtX2xheWVySUQgeyBnZW5lcmF0ZUxheWVySUQoKSB9OworICAgIE9ic2VydmVyKiBtX29ic2Vy
dmVyOworICAgIFBsYXRmb3JtTGF5ZXIqIG1fcGxhdGZvcm1MYXllciB7IG51bGxwdHIgfTsKKyAg
ICBXZWJDb3JlOjpDb2xvciBtX3NvbGlkQ29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgbV9kZWJ1
Z0JvcmRlckNvbG9yOworICAgIE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBtX3VuY29tbWl0dGVk
Q2hhbmdlczsKKyAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGggeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL1dDQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0ZjUwMDJmNTRhNDM0MzAxMzQ1
MDg1MDFkNzI3ZWQ3Njg5Y2NiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQmFja2luZ1N0b3JlIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ0JhY2tpbmdTdG9yZSgpIHsgfQor
ICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIHsgcmV0dXJuIG1faW1hZ2VC
dWZmZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4mJiBpbWFnZSkgeyBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShpbWFnZSk7IH0K
KyAgICBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLmdl
dCgpOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBib29sIGhhc0ltYWdlQnVmZmVy
ID0gbV9pbWFnZUJ1ZmZlcjsKKyAgICAgICAgZW5jb2RlciA8PCBoYXNJbWFnZUJ1ZmZlcjsKKyAg
ICAgICAgaWYgKGhhc0ltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0
YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqbV9p
bWFnZUJ1ZmZlci0+ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NCYWNraW5nU3RvcmUm
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJvb2wgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzSW1hZ2VCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoaGFzSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIEltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVz
dWx0Lm1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc3RkOjpnZXQ8U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1f
aW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjU2Njg3YjJi
ODllZTNjMzEzZGFmNTgyMDYzMGU3ZDhmMDNkODVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuY3BwCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldDTGF5ZXJGYWN0b3J5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0NMYXllckZhY3Rv
cnk6OldDTGF5ZXJGYWN0b3J5KEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXImIG9ic2VydmVyKQor
ICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKK3sKK30KKworUmVmPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IFdDTGF5ZXJGYWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI6OlR5cGUgbGF5ZXJUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50JiBj
bGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllcldDKGxheWVy
VHlwZSwgY2xpZW50LCBtX29ic2VydmVyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZh
Y3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0
b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjEyZDJiZTUxMWI5YjljZDE0YjNmYjlkYWRlNWVhODI5OTlhMzZk
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L1dDTGF5ZXJGYWN0b3J5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdDTGF5ZXJGYWN0b3J5IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0
b3J5IHsKK3B1YmxpYzoKKyAgICBXQ0xheWVyRmFjdG9yeShHcmFwaGljc0xheWVyV0M6Ok9ic2Vy
dmVyJik7CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkK
KyAgICBSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikg
b3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJiBtX29ic2VydmVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTRjNmYwNThlZTAzYTYz
OTE2YzE2MzU5ODY4NjE4ZjUxNjAxOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMCwwICsxLDMwMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0Vu
dW1UcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitlbnVtIGNsYXNzIFdDTGF5ZXJDaGFuZ2UgOiB1aW50MzJfdCB7CisgICAgQ2hpbGRy
ZW4gICAgICAgICAgICAgICAgPSAxIDw8ICAwLAorICAgIE1hc2tMYXllciAgICAgICAgICAgICAg
ID0gMSA8PCAgMSwKKyAgICBSZXBsaWNhTGF5ZXIgICAgICAgICAgICA9IDEgPDwgIDIsCisgICAg
R2VvbWV0cnkgICAgICAgICAgICAgICAgPSAxIDw8ICAzLAorICAgIFByZXNlcnZlczNEICAgICAg
ICAgICAgID0gMSA8PCAgNCwKKyAgICBDb250ZW50c1Zpc2libGUgICAgICAgICA9IDEgPDwgIDUs
CisgICAgQmFja2ZhY2VWaXNpYmlsaXR5ICAgICAgPSAxIDw8ICA2LAorICAgIE1hc2tzVG9Cb3Vu
ZHMgICAgICAgICAgID0gMSA8PCAgNywKKyAgICBTb2xpZENvbG9yICAgICAgICAgICAgICA9IDEg
PDwgIDgsCisgICAgRGVidWdWaXN1YWxzICAgICAgICAgICAgPSAxIDw8ICA5LAorICAgIFJlcGFp
bnRDb3VudCAgICAgICAgICAgID0gMSA8PCAxMCwKKyAgICBDb250ZW50c1JlY3QgICAgICAgICAg
ICA9IDEgPDwgMTEsCisgICAgQ29udGVudHNDbGlwcGluZ1JlY3QgICAgPSAxIDw8IDEyLAorICAg
IE9wYWNpdHkgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKKyAgICBCYWNraW5nU3RvcmUgICAg
ICAgICAgICA9IDEgPDwgMTQsCisgICAgVHJhbnNmb3JtICAgICAgICAgICAgICAgPSAxIDw8IDE1
LAorICAgIENoaWxkcmVuVHJhbnNmb3JtICAgICAgID0gMSA8PCAxNiwKKyAgICBGaWx0ZXJzICAg
ICAgICAgICAgICAgICA9IDEgPDwgMTcsCisgICAgQmFja2Ryb3BGaWx0ZXJzICAgICAgICAgPSAx
IDw8IDE4LAorICAgIFBsYXRmb3JtTGF5ZXIgICAgICAgICAgID0gMSA8PCAxOSwKK307CisKK3N0
cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgaWQ7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IGNoYW5nZXM7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gY2hpbGRy
ZW47CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQ+IG1hc2tMYXllcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gcmVwbGljYUxheWVyOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgcG9zaXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm91bmRz
T3JpZ2luOworICAgIGJvb2wgbWFza3NUb0JvdW5kczsKKyAgICBib29sIHNob3dEZWJ1Z0JvcmRl
cjsKKyAgICBib29sIHNob3dSZXBhaW50Q291bnRlcjsKKyAgICBib29sIGNvbnRlbnRzVmlzaWJs
ZTsKKyAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICBib29sIHByZXNlcnZlczNEOwor
ICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdC
b3JkZXJDb2xvcjsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lk
dGg7CisgICAgaW50IHJlcGFpbnRDb3VudDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udGVu
dHNSZWN0OworICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsKKyAgICBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyBmaWx0ZXJzOworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJz
OworICAgIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAg
ICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OworICAgIHVp
bnQ2NF90IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKworICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGVuY29kZXIgPDwgaWQ7CisgICAgICAgIGVuY29kZXIgPDwgY2hhbmdlczsKKyAg
ICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgY2hpbGRyZW47CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6TWFza0xheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNrTGF5ZXI7CisgICAgICAg
IGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKQorICAgICAgICAgICAg
ZW5jb2RlciA8PCByZXBsaWNhTGF5ZXI7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6R2VvbWV0cnkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHBvc2l0aW9uIDw8IGFuY2hv
clBvaW50IDw8IHNpemUgPDwgYm91bmRzT3JpZ2luOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKQorICAgICAgICAgICAgZW5jb2RlciA8PCBwcmVzZXJ2
ZXMzRDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2li
bGUpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzVmlzaWJsZTsKKyAgICAgICAgaWYg
KGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgICAg
ICBlbmNvZGVyIDw8IGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNr
c1RvQm91bmRzOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29s
b3IpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNvbGlkQ29sb3I7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgZW5jb2RlciA8
PCBzaG93RGVidWdCb3JkZXIgPDwgZGVidWdCb3JkZXJDb2xvciA8PCBkZWJ1Z0JvcmRlcldpZHRo
OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc2hvd1JlcGFpbnRDb3VudGVyIDw8IHJlcGFpbnRDb3VudDsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgY29udGVudHNDbGlwcGluZ1JlY3Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6T3BhY2l0eSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgb3BhY2l0eTsKKyAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBl
bmNvZGVyIDw8IGJhY2tpbmdTdG9yZTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpUcmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmlsdGVy
czsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMp
CisgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tkcm9wRmlsdGVycyA8PCBiYWNrZHJvcEZpbHRl
cnNSZWN0OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5
ZXIpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDTGF5ZXJVcGF0ZUlu
Zm8mIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmlk
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY2hhbmdlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlbikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQubWFza0xheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGlj
YUxheWVyKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXBsaWNh
TGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucG9zaXRpb24pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmFuY2hvclBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaXplKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHNP
cmlnaW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkgeworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucHJlc2VydmVzM0QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpIHsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnRzVmlzaWJsZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkgeworICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2ZhY2VWaXNpYmlsaXR5KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubWFza3NUb0JvdW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlNvbGlkQ29sb3IpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnNvbGlkQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMp
IHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3dEZWJ1Z0JvcmRl
cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuZGVidWdCb3JkZXJDb2xvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGVidWdC
b3JkZXJXaWR0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkg
eworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvd1JlcGFpbnRDb3Vu
dGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5yZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c1JlY3QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmNvbnRlbnRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRl
bnRzQ2xpcHBpbmdSZWN0KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb250ZW50c0NsaXBwaW5nUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9w
YWNpdHkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9wYWNpdHkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tpbmdTdG9yZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQudHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW5UcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmNoaWxkcmVuVHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Rmls
dGVycykgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlsdGVycykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChy
ZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5iYWNrZHJvcEZpbHRlcnNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6UGxhdGZvcm1MYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3Ry
dWN0IFdDVXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQ+IGFkZGVkTGF5ZXJzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpQbGF0Zm9ybUxheWVySUQ+IHJlbW92ZWRMYXllcnM7CisgICAgVmVjdG9yPFdDTGF5ZXJV
cGF0ZUluZm8+IGNoYW5nZWRMYXllcnM7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBl
bmNvZGVyIDw8IHJvb3RMYXllcjsKKyAgICAgICAgZW5jb2RlciA8PCBhZGRlZExheWVyczsKKyAg
ICAgICAgZW5jb2RlciA8PCByZW1vdmVkTGF5ZXJzOworICAgICAgICBlbmNvZGVyIDw8IGNoYW5n
ZWRMYXllcnM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+CisgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ1Vw
YXRlSW5mbyYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQucm9vdExheWVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuYWRkZWRMYXllcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZW1vdmVkTGF5ZXJzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuY2hhbmdlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJL
aXQ6OldDTGF5ZXJDaGFuZ2UsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRy
ZW4sCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6TWFza0xheWVyLAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xh
eWVyQ2hhbmdlOjpHZW9tZXRyeSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpQcmVz
ZXJ2ZXMzRCwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUs
CisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5LAorICAg
ICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMsCisgICAgICAgIFdlYktp
dDo6V0NMYXllckNoYW5nZTo6U29saWRDb2xvciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hh
bmdlOjpEZWJ1Z1Zpc3VhbHMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UmVwYWlu
dENvdW50LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCwKKyAg
ICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCwKKyAgICAg
ICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5LAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpU
cmFuc2Zvcm0sCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zv
cm0sCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RmlsdGVycywKKyAgICAgICAgV2Vi
S2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6UGxhdGZvcm1MYXllcgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCmluZGV4IGViNDBiNGM2NmRkOGIwYTg0
NThjZjJhNmE1NDQxNjE5ZmUwMzFlN2MuLjQ5YTNmNDFlZjY2NGU3MmRmMGQ5ZjhmYjA5ZDdhZWU3
M2ZmZTk4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtNDQsNiArNDQsNyBA
QCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0FJUk8gT04pCiBTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfQ0YgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VSTCBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9HUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBF
UiBPTikKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9HUkFQSElDU19MQVlFUl9XQyBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfT1BFTkdMX0VTIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9PUEVO
R0xfRVNfMyBPTikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhMTZk
NmNlZWYzZTFjMzEyZTdjZjM3NDhiYWFiZTg3NzlhZGQ0ZWQ3Li4xMGVkMDgwNDIyYmJhMTkxZGZj
MWM1NGQyYzkzY2FmNjQ0ZWFlZGU1IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMTAtMTggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBOZXcgR3JhcGhpY3NMYXll
ciBmb3IgR1BVIHByb2Nlc3MgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI4MzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlOgorCiAy
MDIxLTEwLTE4ICBNczJnZXIgIDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgbXkg
Z2l0aHViIHVzZXJuYW1lIHRvIGNvbnRyaWJ1dG9ycy5qc29uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442326</attachid>
            <date>2021-10-24 14:52:04 -0700</date>
            <delta_ts>2021-10-26 13:47:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wc-2021-10-25.diff</filename>
            <type>text/plain</type>
            <size>156016</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOTAwMTYxMDY3YzQuLmZm
YjA2ZmM1YzhhOCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDIxLTEwLTI0ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBw
cm9jZXNzIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZToKKworMjAyMS0xMC0xOCAg
RnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2lu
Q2Fpcm9dIE5ldyBHcmFwaGljc0xheWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zV2luQ2Fpcm8uY21ha2U6CisKIDIwMjEtMTAtMjEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEdpdEh1YiBuYW1lIHRvIGNvbnRyaWJ1dG9y
cy5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZmM3NjViODBiYmNlLi4xMTYwOWY1NjRiMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMS0xMC0yNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIE5ldyBHcmFwaGljc0xheWVy
IGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2VXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZvcm1MYXllciBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6
IERpc3BsYXlMaXN0CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBkb2Vzbid0IGhhdmUgYSBIREMu
IERvIG5vdGhpbmcgZm9yIERpc3BsYXlMaXN0CisgICAgICAgIGNvbnRleHQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkRpcmVjdDNEUHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZSk6CisgICAgICAgIFBhaW50IGEg
ZnJhbWUgYnkgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UgaW5zdGVhZCBv
ZgorICAgICAgICBDYWlybyBBUEkgZm9yIERpc3BsYXlMaXN0LgorCiAyMDIxLTEwLTIxICBDYXRo
aWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBUaGUgaW50cmlzaWMg
c2l6ZSBvZiBwaWN0dXJlIGltYWdlIGluc2lkZSBhIHRlbXBsYXRlIGlzIGFsd2F5cyB6ZXJvCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCBkMjI1NjkwZjVlMDQuLjVkZGFk
OWMyNThlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0xMiw2ICsx
Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2xvYWRlci9hcmNoaXZlL2NmIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jZiIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2MiCiApCiAKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwpAQCAtMjQsNiArMjUsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRl
ckhhcmZCdXp6LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2VXQy5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAKQEAgLTQ0LDYgKzQ3LDEwIEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3dpbi9QRUltYWdlLmNwcAogKQogCitsaXN0
KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaAorKQorCiBsaXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUwogICAgIGNvbWN0bDMyCiAgICAgY3J5cHQzMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuY3BwCmluZGV4IGYwYzhlNGU0NTRkMy4uZGMwYzU1ZTIzZGFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwCkBAIC0zMyw2ICszMywxMCBA
QAogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIgLy8gflJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlIG5lZWRzIGl0CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
JiBhdHRycykKQEAgLTEzMCw3ICsxMzQsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgYXZhaWxhYmxlRXh0ZW5zaQogICAg
ICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKIH0KIAotI2lmICFQ
TEFURk9STShDT0NPQSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmgKaW5k
ZXggZDljNzMzYjZjMzRlLi5hOTdlMzViZmYyMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eUJhc2UuaApAQCAtOTYsNiArOTYsOSBAQCBwcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX2Rpc3BsYXlCdWZmZXI7CisjZWxpZiBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyQ29udGFpbmVyIGNyZWF0ZVBs
YXRmb3JtTGF5ZXIoKSA9IDA7CisgICAgUGxhdGZvcm1MYXllckNvbnRhaW5lciBtX3BsYXRmb3Jt
TGF5ZXI7CiAjZW5kaWYKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMjgyZTA4NmNkZjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oIgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpICYmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBjcmVhdGVQbGF0
Zm9ybUxheWVyKCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYTM5ZTA4Y2NjZTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9X
Q1BsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitw
cml2YXRlOgorICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgZmluYWwgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggZDVhM2JhOTQzOGE5Li5kODYx
YjkxNTBjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0YXRp
YyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBoaWNz
Q29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBz
dXBwb3J0QWxwaGFCbGVuZCkKIHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNFKENBSVJPKQog
ICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggZTZkZWI1ZWMxMDM4
Li5jOWQwOGM3YmUyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24uY3BwCkBAIC0yODU3LDE1ICsyODU3LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJyZW50RnJhbWUo
V2ViCiAgICAgICAgIEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCk7
CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIGlm
IChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAgICAgIGltYWdl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOwotCi0g
ICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBp
ZiAoaW1hZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0
YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlS
T19GT1JNQVRfSU5WQUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpKTsKKyAgICAg
ICAgICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkp
OworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1JlY3Quc2l6ZSgp
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3Jt
IG5lZWRzIHRvIGltcGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhp
Y3MgY29udGV4dCEiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJkZC4uNzljNjYwZWQ2NzZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwOCBAQAorMjAyMS0xMC0yNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIE5ldyBHcmFwaGljc0xh
eWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBHcmFwaGljc0xheWVyIGltcGxlbWVudGF0aW9u
IEdyYXBoaWNzTGF5ZXJXQyB3aGljaAorICAgICAgICB0cmFuc2ZlcnMgR3JhcGhpY3NMYXllciB0
cmVlIHRvIEdQVSBwcm9jZXNzIGFuZCBydW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgKFRleHR1
cmVNYXBwZXIpIGluIEdQVSBwcm9jZXNzLgorCisgICAgICAgIEluIEdQVSBwcm9jZXNzIG1vZGUs
IFdlYkdMIGlzIHJ1biBpbiBHUFUgcHJvY2Vzcy4gU28sIHRoZQorICAgICAgICBjb21wb3NpdG9y
IHNob3VsZCBiZSBydW4gaW4gR1BVIHByb2Nlc3MuIE90aGVyd2lzZSwgdGhlIG91dHB1dAorICAg
ICAgICB0ZXh1dHJlIG9mIFdlYkdMIGhhcyB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIEdQVSBwcm9j
ZXNzIHRvIHRoZQorICAgICAgICBjb21wb3NpdG9yIHByb2Nlc3MgKFVJIHByb2Nlc3Mgb3Igd2Vi
IHByb2Nlc3MpLgorCisgICAgICAgIEJlY2F1c2UgQU5HTEUgaXNuJ3QgdGhyZWFkLXNhZmUsIHRo
ZSBjb21wb3NpdG9yIGFuZCBXZWJHTCBzaG91bGQKKyAgICAgICAgYmUgcnVuIGluIHRoZSBzYW1l
IHRocmVhZCBpbiBHUFUgcHJvY2Vzcy4KKworICAgICAgICBFbmFibGluZyBncHVfcHJvY2Vzc193
ZWJnbCBhbHNvIGVuYWJsZXMgR1BVIHByb2Nlc3MgY29tcG9zaXRpbmcgbm93LgorICAgICAgICA+
IHJlZyBhZGQgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNz
X3dlYmdsIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAgZ3B1X3Byb2Nlc3NfY2FudmFz
X3JlbmRlcmluZyBjYW4gYWxzbyBiZSBlbmFibGVkLgorICAgICAgICA+IHJlZyBhZGQgSEtFWV9D
VVJSRU5UX1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNzX2NhbnZhc19yZW5kZXJp
bmcgL3QgUkVHX0RXT1JEIC9kIDEgL2YKKworICAgICAgICBFbmFibGluZyBncHVfcHJvY2Vzc19k
b21fcmVuZGVyaW5nIGlzIHN0aWxsIGV4cGVyaW1lbnRhbC4KKyAgICAgICAgPiByZWcgYWRkIEhL
RVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19kb21fcmVuZGVy
aW5nIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5k
cyByZXN0b3JlIHRoZSBub24tR1BVIHByb2Nlc3MgbW9kZS4KKyAgICAgICAgPiByZWcgZGVsZXRl
IEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19jYW52YXNf
cmVuZGVyaW5nIC9mCisgICAgICAgID4gcmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0
d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nlc3Nfd2ViZ2wgL2YKKyAgICAgICAgPiByZWcgZGVsZXRl
IEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19kb21fcmVu
ZGVyaW5nIC9mCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGVXQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBH
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3M6
OnNoYXJlZFNjZW5lQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OnNjaGVkdWxlRnJl
ZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3QuaDogQWRkZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXQ1NjZW5lOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V0NTY2VuZTo6fldD
U2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lOjp1cGRhdGUpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldDU2NlbmVDb250ZXh0OjpXQ1NjZW5lQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldD
U2NlbmVDb250ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXQ1Nj
ZW5lQ29udGV4dDo6Y3JlYXRlVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OldDU2Nl
bmVDb250ZXh0Ojpzd2FwQnVmZmVycyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9XQ1NjZW5lQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1dDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcjo6ZW5zdXJlSG9sZGVyRm9yV2luZG93KToKKyAg
ICAgICAgKFdlYktpdDo6V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OnJlbW92ZUhvbGRlcik6
CisgICAgICAgICogR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzTWFpbik6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190
aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKGNvbmRpdGlvbnNfZm9y
X2hlYWRlcik6CisgICAgICAgICogU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjpEcmF3aW5nQXJlYVByb3h5V0MpOgorICAgICAgICAo
V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eVdDOjp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
V0M6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5V0M6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eVdDOjpkaXNjYXJkQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy93aW4vUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFpbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5V0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6Y3JlYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OlJlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJv
eHk6On5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6OmRpZFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Ojp3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjpXQ1BsYXRmb3JtTGF5
ZXJHQ0dMKToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6Z3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnN1cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhV0M6OkRyYXdpbmdBcmVhV0MpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
Ojp+RHJhd2luZ0FyZWFXQyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBo
aWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dXBkYXRl
Um9vdExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6YXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6
c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
V0M6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OmZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjppc0NvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhV0M6OnVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhV0M6OnNlbmRVcGRhdGVBQyk6CisgICAgICAgIChXZWJLaXQ6OnNob3VsZFBhaW50Qm91
bmRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNlbmRVcGRhdGVOb25B
Qyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8pOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRz
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZp
Y2VTY2FsZUZhY3RvciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0Ry
YXdpbmdBcmVhV0MuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dy
YXBoaWNzTGF5ZXJXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVy
V0M6OkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
fkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Z2Vu
ZXJhdGVMYXllcklEKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpwcmltYXJ5
TGF5ZXJJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleCk6CisgICAg
ICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhp
Y3NMYXllcldDOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldFJlcGxpY2F0ZWRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRBbmNo
b3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Qm91bmRzT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
S2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
OjpzZXRDb250ZW50c0NsaXBwaW5nUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
OjpzZXRDb250ZW50c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3Jh
cGhpY3NMYXllcldDOjp1c2VzQ29udGVudHNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6
R3JhcGhpY3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBo
aWNzTGF5ZXJXQzo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ry
b3BGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJv
cEZpbHRlcnNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldDQmFja2luZ1N0b3JlOjpXQ0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldD
QmFja2luZ1N0b3JlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0
b3JlOjpzZXRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpi
aXRtYXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldDTGF5ZXJGYWN0b3J5OjpXQ0xheWVyRmFjdG9yeSk6CisgICAgICAgIChX
ZWJLaXQ6OldDTGF5ZXJGYWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXQ0xheWVyVXBhdGVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
Q0xheWVyVXBhdGVJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ1VwYXRlSW5mbzo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NVcGF0ZUluZm86OmRlY29kZSk6CisK
IDIwMjEtMTAtMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgd2VicHVzaGQgcGxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBmYjIwN2M0NjM2
Y2QuLmU5NmZhZmUwOTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMz
MCw2ICszMzQsMzAgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb25maWd1cmVM
b2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW0KICNlbmRpZgogfQogCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLmVuc3VyZShpZGVudGlmaWVyLCBbJl0oKSB7Cisg
ICAgICAgIHJldHVybiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgqdGhpcywgV1RGTW92
ZShpZGVudGlmaWVyKSwgbmF0aXZlV2luZG93KTsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhv
c3RNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGF1dG8gaXRlciA9IG1fcmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xNYXAuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX3JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisjZW5kaWYKKwogYm9vbCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiB7CiAg
ICAgZm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCA5YzUyMzY0MTQyMjQuLmVhMzVjYjQ0
MzU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvVENDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNs
dWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwpAQCAtOTEsNiArOTUsMTAgQEAgc3RydWN0IE1lZGlhT3ZlcnJpZGVzRm9yVGVzdGluZzsKIHN0
cnVjdCBSZW1vdGVBdWRpb1Nlc3Npb25Db25maWd1cmF0aW9uOwogc3RydWN0IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnM7CiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q7CisjZW5kaWYKKwogY2xhc3MgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+CiAg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6Tm93UGxheWluZ01hbmFnZXI6OkNsaWVudApAQCAtMTYxLDYg
KzE2OSwxMCBAQCBwdWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdl
RGVjb2RlckFWRlByb3h5KCk7CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykK
KyAgICBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworI2VuZGlmCisKICAgICB2b2lk
IHVwZGF0ZVN1cHBvcnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRV
bmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3Q7CkBAIC0yMjYsNiArMjM4LDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
Jik7CiAgICAgdm9pZCBjb25maWd1cmVMb2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBXVEZM
b2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsKTsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKKyAgICB2b2lkIGNyZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9z
dElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgdm9pZCByZWxlYXNlV0NM
YXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcik7CisjZW5kaWYK
KwogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6
OkNvbm5lY3Rpb24mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKQEAgLTMwNSw2ICszMjIs
MTEgQEAgcHJpdmF0ZToKICAgICB1c2luZyBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXAg
PSBIYXNoTWFwPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lcklkZW50aWZpZXIsIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJQcm94eT4+OwogICAgIFJlbW90ZUF1
ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcCBtX3JlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcDsK
IAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB1c2luZyBSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RNYXAgPSBIYXNoTWFwPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+PjsKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RN
YXAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXA7CisjZW5kaWYKKwogICAgIFJlZlB0cjxSZW1v
dGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eT4gbV9yZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVu
ZXI7CiAgICAgYm9vbCBtX2lzQWN0aXZlTm93UGxheWluZ1Byb2Nlc3MgeyBmYWxzZSB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGMxYmY4MDE5Y2VhYi4uMzkxYzE5ZmU5ZDg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNTEsNiArNTEsMTAgQEAgbWVzc2Fn
ZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAg
ICAgUmVsZWFzZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcihXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1h
bmRMaXN0ZW5lcklkZW50aWZpZXIgaWRlbnRpZmllcikKICAgICBTZXRVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKICAgICBDb25maWd1cmVMb2dnaW5nQ2hh
bm5lbChTdHJpbmcgY2hhbm5lbE5hbWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUg
c3RhdGUsIGVudW06dWludDhfdCBXVEZMb2dMZXZlbCBsZXZlbCkKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisgICAgQ3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVI
b3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAgUmVs
ZWFzZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRl
bnRpZmllcikKKyNlbmRpZgogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKaW5kZXggNTQxZjViMGZmMmNkLi5hNzI2ZDdl
MTJiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaApAQCAtNDIsNiArNDIs
MTAgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgog
I2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiV0NTaGFyZWRT
Y2VuZUNvbnRleHRIb2xkZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBOb3dQbGF5aW5nTWFuYWdlcjsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CkBAIC05Miw2ICs5
NiwxMCBAQCBwdWJsaWM6CiAgICAgV29ya1F1ZXVlJiBsaWJXZWJSVENDb2RlY3NRdWV1ZSgpOwog
I2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgV0NTaGFyZWRTY2VuZUNv
bnRleHRIb2xkZXImIHNoYXJlZFNjZW5lQ29udGV4dCgpIHsgcmV0dXJuIG1fc2hhcmVkU2NlbmVD
b250ZXh0OyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWUDkpCiAgICAgdm9pZCBlbmFibGVWUDlE
ZWNvZGVycyhib29sIHNob3VsZEVuYWJsZVZQOERlY29kZXIsIGJvb2wgc2hvdWxkRW5hYmxlVlA5
RGVjb2RlciwgYm9vbCBzaG91bGRFbmFibGVWUDlTV0RlY29kZXIpOwogI2VuZGlmCkBAIC0xODQs
NiArMTkyLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9saWJXZWJSVEND
b2RlY3NRdWV1ZTsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFdD
U2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIG1fc2hhcmVkU2NlbmVDb250ZXh0OworI2VuZGlmCisK
ICAgICBzdHJ1Y3QgR1BVU2Vzc2lvbiB7CiAgICAgICAgIFN0cmluZyBtZWRpYUNhY2hlRGlyZWN0
b3J5OwogI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuaAppbmRleCBlZjQxZWE2MDgyYmEuLmEwNzI5NzY1Y2I1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmgKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoKTsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQtPnBs
YXRmb3JtTGF5ZXIoKTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgR3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9u
QnVmZmVyJiYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1Jl
cXVlc3QuY3BwCmluZGV4IDMyNmIwN2YyZWJkZS4uNWE2Y2U2NWU3NDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNDIsMTAgKzQyLDEy
IEBAIHN0YXRpYyBib29sIGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzOwog
CiB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6c2NoZWR1bGVGcmVl
V2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogeworI2lmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CiAgICAgaWYgKGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKQogICAgICAg
ICByZXR1cm47CiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoZnJlZVdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzVGltZW91dCwgZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKTsKICAg
ICBkaWRTY2hlZHVsZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyA9IHRydWU7CisjZW5kaWYK
IH0KIAogdm9pZCBTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZyZWVXZWJH
TFJlbmRlcmluZ1Jlc291cmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzQ4YzBiYWI5MTk0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXQ1NjZW5lLmgiCisj
aW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiByZW1vdGVH
cmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlV0NMYXllclRyZWVIb3N0PiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5
ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQor
eworICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4oY29ubmVjdGlv
blRvV2ViUHJvY2VzcywgaWRlbnRpZmllciwgbmF0aXZlV2luZG93KTsKK30KKworUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgY29ubmVjdGlvblRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKKyAgICA6IG1fY29ubmVj
dGlvblRvV2ViUHJvY2Vzcyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihjb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdwdVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5lbnN1cmVI
b2xkZXJGb3JXaW5kb3cobmF0aXZlV2luZG93KSkKK3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmll
ci50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4o
KTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNo
KFtzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIGdsQ29udGV4dEhvbGRlciA9IG1fc2hhcmVkU2NlbmVD
b250ZXh0SG9sZGVyLmdldCgpLCBuYXRpdmVXaW5kb3ddIHsKKyAgICAgICAgaWYgKCFnbENvbnRl
eHRIb2xkZXItPmNvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHRIb2xkZXItPmNvbnRleHQu
ZW1wbGFjZShuYXRpdmVXaW5kb3cpOworICAgICAgICBzY2VuZS0+aW5pdGlhbGl6ZSgqZ2xDb250
ZXh0SG9sZGVyLT5jb250ZXh0KTsKKyAgICB9KTsKK30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0
Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KCkKK3sKKyAgICBBU1NFUlQobV9jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKTsKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZl
ck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVI
b3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAg
ICBhdXRvIGdsQ29udGV4dEhvbGRlciA9IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Z3B1UHJv
Y2VzcygpLnNoYXJlZFNjZW5lQ29udGV4dCgpLnJlbW92ZUhvbGRlcihtX3NoYXJlZFNjZW5lQ29u
dGV4dEhvbGRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRH
TFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtnbENvbnRleHRIb2xkZXIgPSBXVEZNb3ZlKGds
Q29udGV4dEhvbGRlciksIHNjZW5lID0gV1RGTW92ZShtX3NjZW5lKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgLy8gRGVzdHJveSBzY2VuZSBvbiB0aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZC4KKyAg
ICAgICAgc2NlbmUgPSBudWxscHRyOworICAgICAgICAvLyBnbENvbnRleHRIb2xkZXIgY2FuIGJl
IGRlc3Ryb3llZCBvbiB0aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZCBiZWNhdXNlIGl0IGhhc09u
ZVJlZi4KKyAgICB9KTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVXQ0xheWVyVHJlZUhv
c3Q6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fY29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVX
Q0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXll
clRyZWVIb3N0Ojp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCit7CisgICAgYXV0byByZW1v
dGVHQ0dMID0gV1RGOjptYXAodXBkYXRlLmNoYW5nZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXll
clVwZGF0ZSkgLT4gUmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiB7CisgICAgICAgIGlm
IChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewor
ICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wobWFrZU9iamVjdElkZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyVHlwZT4obGF5ZXJVcGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICBy
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3
ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9
IFdURk1vdmUodXBkYXRlKSwgcmVtb3RlR0NHTCA9IFdURk1vdmUocmVtb3RlR0NHTCldKCkgbXV0
YWJsZSB7CisgICAgICAgIHNjZW5lLT51cGRhdGUoV1RGTW92ZSh1cGRhdGUpLCBXVEZNb3ZlKHJl
bW90ZUdDR0wpKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFr
VGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRVcGRhdGUoKSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19M
QVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjMyOGRiM2RkYjQyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJX
Q0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiV0NTaGFyZWRTY2VuZUNvbnRl
eHRIb2xkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xh
c3MgVGV4dHVyZU1hcHBlcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworY2xhc3MgV0NTY2VuZTsKK3N0cnVjdCBXQ1Vw
YXRlSW5mbzsKKworY2xhc3MgUmVtb3RlV0NMYXllclRyZWVIb3N0IDogcHVibGljIElQQzo6TWVz
c2FnZVJlY2VpdmVyLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRy
ZWVIb3N0KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5
ZXJUcmVlSG9zdD4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldD
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgUmVt
b3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldD
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgflJl
bW90ZVdDTGF5ZXJUcmVlSG9zdCgpOworICAgIC8vIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lk
IHVwZGF0ZShXQ1VwYXRlSW5mbyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgSVBD
OjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvblRv
V2ViUHJvY2VzczsKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1faWRlbnRpZmllcjsK
KyAgICBSZWZQdHI8V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OkhvbGRlcj4gbV9zaGFyZWRT
Y2VuZUNvbnRleHRIb2xkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDU2NlbmU+IG1fc2NlbmU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19M
QVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjUxNmZkYTQxOTFkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdD
TGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorCittZXNzYWdlcyAtPiBSZW1vdGVXQ0xheWVyVHJlZUhvc3QgTm90UmVmQ291bnRlZCB7Cisg
ICAgVXBkYXRlKHN0cnVjdCBXZWJLaXQ6OldDVXBhdGVJbmZvIHVwZGF0ZUluZm8pCit9CisKKyNl
bmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4yNTE3MTBjYTIzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKQEAgLTAsMCArMSwxOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDU2NlbmUu
aCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
Q1VwYXRlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllcik7CitwdWJs
aWM6CisgICAgTGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllcjo6Q2xpZW50CisgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHRleG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIobnVs
bHB0cik7CisgICAgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1MYXllck5lZWRzRGlzcGxheSgpIG92
ZXJyaWRlIHsgfQorCisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRleG1hcExheWVy
OworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVy
OworfTsKKwordm9pZCBXQ1NjZW5lOjppbml0aWFsaXplKFdDU2NlbmVDb250ZXh0JiBjb250ZXh0
KQoreworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBh
Y3RpdmUgT3BlbkdMIGNvbnRleHQuCisgICAgbV9jb250ZXh0ID0gJmNvbnRleHQ7CisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVRleHR1cmVNYXBwZXIoKTsKK30KKworV0NTY2VuZTo6V0NTY2VuZSgpID0g
ZGVmYXVsdDsKKworV0NTY2VuZTo6fldDU2NlbmUoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKK30KKwordm9p
ZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1
dG8gaWQgOiB1cGRhdGUuYWRkZWRMYXllcnMpIHsKKyAgICAgICAgYXV0byBsYXllciA9IG1ha2VV
bmlxdWU8TGF5ZXI+KCk7CisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikp
OworICAgIH0KKworICAgIGF1dG8gcmVtb3RlR0NHTEl0ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdp
bigpOworCisgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJz
KSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOwor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVu
KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAo
bGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
Ok1hc2tMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIg
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAg
ICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5
ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRNYXNr
TGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAgICAgICByZXBsaWNhTGF5ZXIgPSAm
bV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5yZXBsaWNhTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVy
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UG9z
aXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24pOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRlLmFuY2hvclBvaW50KTsKKyAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXplKGxheWVyVXBkYXRlLnNpemUpOworICAgICAgICAg
ICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJvdW5kc09yaWdpbihsYXllclVwZGF0ZS5ib3VuZHNP
cmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUucHJlc2VydmVzM0QpOworICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c1JlY3QobGF5ZXJVcGRhdGUuY29udGVu
dHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRDb250ZW50c0NsaXBwaW5nUmVjdChsYXllclVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7
CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVu
dHNWaXNpYmxlKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzVmlz
aWJsZShsYXllclVwZGF0ZS5jb250ZW50c1Zpc2libGUpOworICAgICAgICBpZiAobGF5ZXJVcGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUu
YmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJVcGRhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7
CisgICAgICAgICAgICBhdXRvIGJpdG1hcCA9IGxheWVyVXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRt
YXAoKTsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICBsYXllci0+
YmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAg
ICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1
cmVNYXBwZXIsIGltYWdlLmdldCgpLCBiaXRtYXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6
ZSgpIH0pOworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3Rv
cmUobGF5ZXItPmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7
CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dFNvbGlkQ29sb3IobGF5ZXJVcGRhdGUuc29saWRDb2xvcik7CisgICAgICAgIGlmIChsYXllclVw
ZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAg
bGF5ZXItPnRleG1hcExheWVyLnNldERlYnVnVmlzdWFscyhsYXllclVwZGF0ZS5zaG93RGVidWdC
b3JkZXIsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyVXBkYXRlLmRlYnVnQm9y
ZGVyV2lkdGgpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBh
aW50Q291bnRlcihsYXllclVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJl
cGFpbnRDb3VudCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6T3BhY2l0eSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRPcGFjaXR5
KGxheWVyVXBkYXRlLm9wYWNpdHkpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRUcmFuc2Zvcm0obGF5ZXJVcGRhdGUudHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVy
VXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclVwZGF0
ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmZpbHRlcnMpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAg
aWYgKGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIucmVzZXQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmICghbGF5ZXItPmJhY2tkcm9wTGF5ZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJMYXll
cj4oKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tk
cm9wTGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
bGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExheWVyLT5zZXRGaWx0ZXJz
KGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycyk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tkcm9wTGF5ZXItPnNldFNpemUobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0
KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0UG9z
aXRpb24obGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkubG9jYXRpb24oKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ry
b3BMYXllcihsYXllci0+YmFja2Ryb3BMYXllci5nZXQoKSk7CisgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZp
bHRlcnNSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICgqcmVtb3Rl
R0NHTEl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpy
ZW1vdGVHQ0dMSXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgICAgICAgICAgcGxh
dGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVy
KG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAg
IH0KKyAgICBBU1NFUlQocmVtb3RlR0NHTEl0ZXJhdG9yID09IHJlbW90ZUdDR0wuZW5kKCkpOwor
CisgICAgZm9yIChhdXRvIGlkIDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5
ZXJzLnJlbW92ZShpZCk7CisKKyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBk
YXRlLnJvb3RMYXllciktPnRleG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRp
b25zUmVjdXJzaXZlbHkoTW9ub3RvbmljVGltZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5k
b3dTaXplID0gZXhwYW5kZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdw
b3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICByb290TGF5ZXItPnBhaW50
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
KworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmMwMDQ2OTI5NWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBw
ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDsKK2NsYXNzIFdDU2NlbmVDb250ZXh0Oworc3RydWN0IFdDVXBhdGVJbmZv
OworCitjbGFzcyBXQ1NjZW5lIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXQ1NjZW5lKTsKK3B1YmxpYzoKKyAgICBXQ1NjZW5lKCk7Cisg
ICAgfldDU2NlbmUoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQmKTsKKyAg
ICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMPj4mJik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IExheWVyOworICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVyPj4gTGF5ZXJNYXA7CisK
KyAgICBXQ1NjZW5lQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworICAgIExheWVyTWFw
IG1fbGF5ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmQ0ZjBjOTBjYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V0NTY2VuZUNvbnRleHQuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1
ZGUgPFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVy
R0wuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
V0NTY2VuZUNvbnRleHQ6OldDU2NlbmVDb250ZXh0KHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sK
KyAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWlu
dGVycHJldF9jYXN0PEdMTmF0aXZlV2luZG93VHlwZT4obmF0aXZlV2luZG93KSk7Cit9CisKK1dD
U2NlbmVDb250ZXh0Ojp+V0NTY2VuZUNvbnRleHQoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgV0NTY2Vu
ZUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IFdDU2NlbmVDb250ZXh0OjpjcmVhdGVUZXh0dXJlTWFwcGVyKCkKK3sKKyAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwordm9pZCBXQ1NjZW5lQ29u
dGV4dDo6c3dhcEJ1ZmZlcnMoKQoreworICAgIG1fZ2xDb250ZXh0LT5zd2FwQnVmZmVycygpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NjZW5lQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
U2NlbmVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5m
ZjRhNTJmMWZkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBl
cjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDU2NlbmVDb250ZXh0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXQ1Nj
ZW5lQ29udGV4dCk7CitwdWJsaWM6CisgICAgV0NTY2VuZUNvbnRleHQodWludDY0X3QgbmF0aXZl
V2luZG93KTsKKyAgICB+V0NTY2VuZUNvbnRleHQoKTsKKworICAgIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IGNy
ZWF0ZVRleHR1cmVNYXBwZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45YjE3ZmZjM2NhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTaGFyZWRTY2VuZUNvbnRleHRI
b2xkZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIENyZWF0aW5nIGEgV0NTY2VuZUNvbnRleHQgZm9yIGEg
d2luZG93IGZhaWxzIGlmIHRoZSB3aW5kb3cgYWxyZWFkeQorLy8gaGFzIG9uZS4gV2hpbGUgbmF2
aWdhdGluZyB0byBhIG5ldyBwYWdlIHdpdGggYSBuZXcgV2ViUHJvY2VzcywgdGhlCisvLyBwcm92
aXNpb25hbCBXZWJLaXQ6OldlYlBhZ2UgaW4gdGhlIG5ldyBXZWJQcm9jZXNzIGhhcyB0aGUgc2Ft
ZQorLy8gd2luZG93IGhhbmRsZS4gV0NTY2VuZUNvbnRleHQgc2hvdWxkIGJlIHNoYXJlZCBhbW9u
ZyBhbGwKKy8vIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdHMgdGhhdCByZW5kZXIgdG8gdGhlIHNhbWUg
bmF0aXZlIHdpbmRvdy4KK2NsYXNzIFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcik7CitwdWJsaWM6
CisgICAgV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1
Y3QgSG9sZGVyIDogUmVmQ291bnRlZDxIb2xkZXI+IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBpbnQ2NF90IG5hdGl2ZVdpbmRvdzsKKyAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBtZW1iZXIgaXMgYWNjZXNzZWQgaW4gdGhlIE9wZW5HTCB0aHJlYWQK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxXQ1NjZW5lQ29udGV4dD4gY29udGV4dDsKKyAgICB9Owor
CisgICAgUmVmPEhvbGRlcj4gZW5zdXJlSG9sZGVyRm9yV2luZG93KGludDY0X3QgbmF0aXZlV2lu
ZG93KQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX2hhc2guYWRkKG5hdGl2ZVdpbmRvdywgbnVsbHB0cik7CisgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIAorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIGhvbGRlciA9IGFkb3B0UmVmKCpuZXcgSG9sZGVy
KTsKKyAgICAgICAgaG9sZGVyLT5uYXRpdmVXaW5kb3cgPSBuYXRpdmVXaW5kb3c7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBob2xkZXIucHRyKCk7CisgICAgICAgIHJldHVybiBo
b2xkZXI7CisgICAgfQorCisgICAgUmVmUHRyPEhvbGRlcj4gcmVtb3ZlSG9sZGVyKFJlZjxIb2xk
ZXI+JiYgaG9sZGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCFob2xkZXItPmhhc09uZVJlZigpKSAKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBtX2hhc2gucmVtb3ZlKGhvbGRlci0+bmF0aXZlV2luZG93KTsKKyAg
ICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxpbnQ2
NF90LCBIb2xkZXIqPiBtX2hhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKaW5kZXggZjAxZTYzOWQ5ZDc4Li4yNzIz
NGNiZmI1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJv
Y2Vzc01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJv
Y2Vzc01haW5XaW4uY3BwCkBAIC0zMCwxNCArMzAsMzEgQEAKIAogI2luY2x1ZGUgIkF1eGlsaWFy
eVByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzcy5oIgorI2luY2x1ZGUgPE9iamJh
c2UuaD4KKyNpbmNsdWRlIDx3dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJS
QVJZKHVzZXIzMik7CitTT0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdh
cmVuZXNzQ29udGV4dCwgQk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRF
WFQpKTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3NNYWluV2luIGZp
bmFsOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlTm9TaW5nbGV0b248R1BVUHJvY2Vz
cz4geworcHVibGljOgorICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKQorICAg
ICAgICAgICAgU2V0UHJvY2Vzc0RwaUF3YXJlbmVzc0NvbnRleHRQdHIoKShEUElfQVdBUkVORVNT
X0NPTlRFWFRfUEVSX01PTklUT1JfQVdBUkVfVjIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBTZXRQcm9jZXNzRFBJQXdhcmUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfTsK
IAogaW50IEdQVVByb2Nlc3NNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyAgICAvLyBm
b3IgRGlyZWN0WAorICAgIEhSRVNVTFQgaHIgPSA6OkNvSW5pdGlhbGl6ZUV4KG51bGxwdHIsIENP
SU5JVF9NVUxUSVRIUkVBREVEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW48R1BVUHJvY2Vzc01haW5XaW4+KGFyZ2Ms
IGFyZ3YpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtl
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAwMTU2NWQ1NTA2OTcuLjhj
OTE4NmVlZGJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMSw2ICsxMSwxMCBAQCBh
ZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19XRUJLSVQpCiBsaXN0KEFQUEVORCBXZWJLaXRfU09V
UkNFUwogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4u
Y3BwCiAKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5j
cHAKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisgICAgR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKKwogICAgIEdQVVByb2Nlc3MvbWVkaWEv
d2luL1JlbW90ZU1lZGlhUGxheWVyUHJveHlXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL3dpbi9H
UFVQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTY5LDYgKzczLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9y
ZVdpbi5jcHAKIAorICAgIFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCisKICAg
ICBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdp
bi5jcHAKQEAgLTc2LDYgKzgyLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBV
SVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAKIAorICAgIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlXQy5jcHAKKyAgICBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKwogICAgIFdlYlByb2Nlc3MvR1BVL21lZGlhL3dp
bi9WaWRlb0xheWVyUmVtb3RlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCkBAIC05NSw2ICsxMDQsMTAgQEAgbGlzdChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3Bw
CiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAorICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKKwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4v
V2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNw
cApAQCAtMTAyLDYgKzExNSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIGxp
c3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCS0lUX0RJUn0v
R1BVUHJvY2Vzcy9ncmFwaGljcy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9jbGFz
c2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VC
S0lUX0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCkBAIC0xMTksMTYgKzEzMywyNSBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKKyAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9j
ZXNzL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93YyIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4iCiAg
ICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvV2ViUGFnZS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vd2luIgogKQogCitsaXN0KEFQUEVO
RCBXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdAorCisgICAgV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkKKykKKwogc2V0KFdlYktpdENvbW1vbkluY2x1ZGVEaXJl
Y3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKIHNldChXZWJLaXRDb21tb25T
eXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVN9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2NTg0
ZDFhZDdlMTUuLjM3NTRhZTQ0NzQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CkBAIC0zNTcsNiArMzU3LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zv
cndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYktpdDo6VHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlRyYW5zYWN0aW9uSUQnLAogICAgICAgICAnV2Vi
S2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYlBhZ2VQcm94
eUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlhSRGV2aWNlSWRlbnRpZmllcicsCkBAIC0zNjgsNiAr
MzY5LDcgQEAgZGVmIGNvbmRpdGlvbnNfZm9yX2hlYWRlcihoZWFkZXIpOgogICAgICAgICAnIklu
cHV0TWV0aG9kU3RhdGUuaCInOiBbIlBMQVRGT1JNKEdUSykiLCAiUExBVEZPUk0oV1BFKSJdLAog
ICAgICAgICAnIkxheWVySG9zdGluZ0NvbnRleHQuaCInOiBbIlBMQVRGT1JNKENPQ09BKSIsIF0s
CiAgICAgICAgICciR2VzdHVyZVR5cGVzLmgiJzogWyJQTEFURk9STShJT1NfRkFNSUxZKSJdLAor
ICAgICAgICAnIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCInOiBbIlVTRShHUkFQSElDU19M
QVlFUl9XQykiXSwKICAgICAgICAgJzxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
Lmg+JzogWyJFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSJdLAogICAgICAgICAnPFdl
YkNvcmUvRGF0YURldGVjdG9yVHlwZS5oPic6IFsiRU5BQkxFKERBVEFfREVURUNUSU9OKSJdLAog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKaW5kZXggNzlmNTNmNTNk
Y2Y5Li43MjJiNWYzNGIwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdp
bmdBcmVhSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5o
CkBAIC0zNyw3ICszNywxMCBAQCBlbnVtIGNsYXNzIERyYXdpbmdBcmVhVHlwZSA6IHVpbnQ4X3Qg
ewogI2VuZGlmCiAgICAgUmVtb3RlTGF5ZXJUcmVlLAogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljcwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3MsCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCisgICAgV0MsCiAjZW5kaWYKIH07CiAgICAgCkBAIC02Myw2ICs2Niw5IEBAIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU+IHsKICAgICAgICAg
LCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6UmVtb3RlTGF5ZXJUcmVlCiAjZWxpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICAgICAgLCBXZWJL
aXQ6OkRyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0ZWRHcmFwaGljcworI2VuZGlmCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpX
QwogI2VuZGlmCiAgICAgPjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2Mv
RHJhd2luZ0FyZWFQcm94eVdDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjIxYTc3ZmMzNjZiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eVdDLmgi
CisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5m
by5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0RyYXdpbmdBcmVhUHJveHlXQzo6RHJh
d2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5LCBXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZTo6V0Ms
IHdlYlBhZ2VQcm94eSwgcHJvY2VzcykKK3sKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6
OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgUmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pCit7CisgICAgdW5wYWlu
dGVkUmVnaW9uID0gcmVjdDsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2JhY2tpbmdTdG9yZS0+cGFpbnQoY29udGV4dCwgcmVjdCk7CisgICAgdW5w
YWludGVkUmVnaW9uLnN1YnRyYWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9iYWNraW5nU3RvcmUt
PnNpemUoKSkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6c2l6ZURpZENoYW5nZSgp
Cit7CisgICAgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOworICAgIG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQrKzsKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlR2VvbWV0
cnkobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCwgbV9zaXplKSk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eVdDOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJ
RCA9PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQorICAgICAgICBpbmNvcnBvcmF0ZVVw
ZGF0ZSh1cGRhdGVJbmZvKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6RGlkVXBk
YXRlKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6ZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRy
ZWVDb250ZXh0JikKK3sKKyAgICBkaXNjYXJkQmFja2luZ1N0b3JlKCk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eVdDOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIGlmICh1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQorICAgICAgICBt
X2JhY2tpbmdTdG9yZS5lbXBsYWNlKHVwZGF0ZUluZm8udmlld1NpemUsIHVwZGF0ZUluZm8uZGV2
aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5KTsKKworICAgIG1fYmFja2luZ1N0b3JlLT5p
bmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsKKworICAgIFJlZ2lvbiBkYW1hZ2VSZWdpb247
CisgICAgaWYgKHVwZGF0ZUluZm8uc2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiByZWN0IDogdXBkYXRlSW5mby51cGRhdGVSZWN0cykKKyAgICAgICAgICAg
IGRhbWFnZVJlZ2lvbi51bml0ZShyZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGFtYWdlUmVn
aW9uID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgpKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS5zZXRWaWV3TmVlZHNEaXNwbGF5KGRhbWFnZVJlZ2lvbik7Cit9CisK
K3ZvaWQgRHJhd2luZ0FyZWFQcm94eVdDOjpkaXNjYXJkQmFja2luZ1N0b3JlKCkKK3sKKyAgICBt
X2JhY2tpbmdTdG9yZSA9IHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5
V0MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTE0N2MxMWNmNDczCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94
eVdDLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVnaW9uOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eVdDIGZpbmFsIDogcHVibGljIERyYXdpbmdB
cmVhUHJveHkgeworcHVibGljOgorICAgIERyYXdpbmdBcmVhUHJveHlXQyhXZWJQYWdlUHJveHkm
LCBXZWJQcm9jZXNzUHJveHkmKTsKKworICAgIHZvaWQgcGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlJl
Z2lvbiYgdW5wYWludGVkUmVnaW9uKTsKKworcHJpdmF0ZToKKyAgICAvLyBEcmF3aW5nQXJlYVBy
b3h5CisgICAgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIC8vIG1lc3NhZ2UgaGFuZGVy
cworICAgIHZvaWQgdXBkYXRlKHVpbnQ2NF90LCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdm9p
ZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90LCBjb25zdCBMYXllclRy
ZWVDb250ZXh0Jik7CisKKyAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUlu
Zm8mKTsKKyAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmUoKTsKKworICAgIHVpbnQ2NF90IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAy
MjA4OThjMTIyZmMuLmM3OTcwNmExMjRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdy
YXBoaWNzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eVdDLmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlBvcHVwTWVudVByb3h5V2luLmgiCkBAIC00Nyw2ICs0OCw4IEBAIFBhZ2VDbGllbnRJ
bXBsOjpQYWdlQ2xpZW50SW1wbChXZWJWaWV3JiB2aWV3KQogLy8gUGFnZUNsaWVudCdzIHB1cmUg
dmlydHVhbCBmdW5jdGlvbnMKIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eShXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCiB7CisgICAgaWYgKG1fdmlldy5wYWdlKCktPnByZWZlcmVuY2VzKCkudXNlR1BVUHJvY2Vz
c0ZvcldlYkdMRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJl
YVByb3h5V0M+KCptX3ZpZXcucGFnZSgpLCBwcm9jZXNzKTsKICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcz4oKm1fdmlldy5wYWdlKCksIHBy
b2Nlc3MpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXgg
MWRmZjRjYzY4M2VhLi4wYzdmNDBjYjQ5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1
cmF0aW9uLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3Mu
aCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
Yk1vdXNlRXZlbnQuaCIKQEAgLTQ5MSwzMSArNDkyLDQzIEBAIHZvaWQgV2ViVmlldzo6cGFpbnQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogICAgIGlmIChkaXJ0eVJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wYWdlLT5lbmRQcmludGluZygpOwotICAg
IGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlDb29y
ZGluYXRlZEdyYXBoaWNzKj4obV9wYWdlLT5kcmF3aW5nQXJlYSgpKSkgewotICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHBvcnQgV2ViS2l0MSdzIHJlY3QgY29hbGVzY2luZyBsb2dpYyBoZXJl
LgotICAgICAgICBSZWdpb24gdW5wYWludGVkUmVnaW9uOworICAgIGlmIChtX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpIHsKKyAgICAgICAgYXV0byBwYWludGVyID0gWyZdKGF1dG8gZHJhd2luZ0FyZWEp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVjdCBj
b2FsZXNjaW5nIGxvZ2ljIGhlcmUuCisgICAgICAgICAgICBSZWdpb24gdW5wYWludGVkUmVnaW9u
OwogI2lmIFVTRShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fp
cm9fd2luMzJfc3VyZmFjZV9jcmVhdGUoaGRjKTsKLSAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9
IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKLQotICAgICAgICBkcmF3aW5nQXJlYS0+cGFpbnQoY29u
dGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOwotCi0gICAgICAgIGNhaXJvX2Rlc3Ry
b3koY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSNl
bHNlCi0gICAgICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFU
ZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCi0gICAg
ICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgICAgICBCYWNraW5nU3RvcmU6OkRYQ29u
bmVjdGlvbnMgY29udGV4dCB7IG1faW1tZWRpYXRlQ29udGV4dC5nZXQoKSwgYmFja0J1ZmZlci5n
ZXQoKSB9OworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9fd2lu
MzJfc3VyZmFjZV9jcmVhdGUoaGRjKTsKKyAgICAgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBj
YWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgCiAgICAgICAgICAgICBkcmF3aW5nQXJlYS0+cGFp
bnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7IAorICAgIAorICAgICAgICAgICAgY2Fp
cm9fZGVzdHJveShjb250ZXh0KTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShz
dXJmYWNlKTsKKyNlbHNlCisgICAgICAgICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNr
QnVmZmVyOyAKKyAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVy
KDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
YmFja0J1ZmZlcikpOyAKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAg
ICAgICAgICAgQmFja2luZ1N0b3JlOjpEWENvbm5lY3Rpb25zIGNvbnRleHQgeyBtX2ltbWVkaWF0
ZUNvbnRleHQuZ2V0KCksIGJhY2tCdWZmZXIuZ2V0KCkgfTsKKyAgICAgICAgICAgICAgICBkcmF3
aW5nQXJlYS0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOworICAg
ICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7
IAogI2VuZGlmCi0KLSAgICAgICAgYXV0byB1bnBhaW50ZWRSZWN0cyA9IHVucGFpbnRlZFJlZ2lv
bi5yZWN0cygpOwotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWN0cykKLSAg
ICAgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgcmVjdCk7Cisg
ICAgCisgICAgICAgICAgICBhdXRvIHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVkUmVnaW9uLnJl
Y3RzKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWN0cykKKyAg
ICAgICAgICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3Qp
OworICAgICAgICB9OworICAgICAgICBzd2l0Y2ggKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+dHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAgICAgICAgICAgIHBh
aW50ZXIoc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eVdDKj4obV9wYWdlLT5kcmF3aW5nQXJl
YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6
OkNvb3JkaW5hdGVkR3JhcGhpY3M6CisgICAgICAgICAgICBwYWludGVyKHN0YXRpY19jYXN0PERy
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4obV9wYWdlLT5kcmF3aW5nQXJlYSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIGRyYXdQ
YWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgZGlydHlSZWN0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKaW5kZXggZGQyZTgwYjY1ZDIzLi4zNTliMGNi
ZGE3NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCkBAIC0zMjEs
NiArMzIxLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIC8vIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlCYXNlIG92ZXJyaWRlcy4KICAgICB2b2lkIHdhaXRVbnRpbEluaXRpYWxpemVk
KCkgZmluYWw7CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBsYXRmb3JtTGF5ZXJD
b250YWluZXIgY3JlYXRlUGxhdGZvcm1MYXllcigpIGZpbmFsOworI2VuZGlmCiAKICAgICBib29s
IGlzQ29udGV4dExvc3QoKSBjb25zdCB7IHJldHVybiAhbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsg
fQogICAgIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlX
Qy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi45MDVkNDMwNTgyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlX
Qy5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyR0NHTC5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGxhdGZvcm1MYXllckNvbnRhaW5lciBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVQbGF0Zm9ybUxheWVyKCkKK3sKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXQ1BsYXRmb3JtTGF5ZXJHQ0dMPihtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzNzFkZDk4ODgzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdl
JiBwYWdlLCBDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQoreworfQorCitSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6flJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVk
KCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJmNvbnN0X2Nhc3Q8
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkmPigqdGhpcykuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK0dQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAg
IGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikgeworICAgICAgICBhdXRvJiBncHVQcm9jZXNz
Q29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25u
ZWN0aW9uKCk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7
CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCks
ICp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQo
CisgICAgICAgICAgICBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRl
V0NMYXllclRyZWVIb3N0KHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKSwgbV9wYWdlLm5hdGl2
ZVdpbmRvd0hhbmRsZSgpKSwKKyAgICAgICAgICAgIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAgICAgbV9ncHVQcm9j
ZXNzQ29ubmVjdGlvbiA9IGdwdVByb2Nlc3NDb25uZWN0aW9uOworICAgIH0KKyAgICByZXR1cm4g
Km1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6OmRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKQoreworICAgIGlmIChhdXRvIGdw
dVByb2Nlc3NDb25uZWN0aW9uID0gc3RkOjpleGNoYW5nZShtX2dwdVByb2Nlc3NDb25uZWN0aW9u
LCBudWxscHRyKSkgeworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1h
cCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigp
LnRvVUludDY0KCkpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VXQ0xheWVy
VHJlZUhvc3Qod2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpKSwgMCwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIH0KK30K
Kwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25E
aWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYgcHJldmlvdXNDb25uZWN0aW9uKQoreworICAg
IHByZXZpb3VzQ29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgIG1fZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJl
dHVybiB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlSW5m
bykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZSh1
cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmRpZFVw
ZGF0ZSgpCit7CisgICAgbV9jbGllbnQuZGlkVXBkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9S
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNzc4ZDhjYjBhMjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5o
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdHJ1Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk7CitwdWJsaWM6CisgICAgY2xh
c3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUo
KSA9IDA7CisgICAgfTsKKworICAgIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KFdlYlBhZ2Um
LCBDbGllbnQmKTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkoKTsKKworICAgIHZv
aWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYpOworCisgICAgdm9pZCBkaWRVcGRhdGUoKTsKKworcHJp
dmF0ZToKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIHdjTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3djTGF5ZXJUcmVlSG9zdElkZW50aWZpZXI7IH07Cisg
ICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7Cisg
ICAgdm9pZCBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7CisKKyAgICAvLyBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENs
b3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikgZmluYWw7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICBJ
UEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFdlYWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb247CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBtX3djTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIgeyBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAg
V2ViUGFnZSYgbV9wYWdlOworICAgIENsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGY4YWY3N2EzMTE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQorCittZXNzYWdlcyAtPiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSBOb3RS
ZWZDb3VudGVkIHsKKyAgICBEaWRVcGRhdGUoKQorfQorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy93Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBkYmEwNWUxNTVmOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXll
clRyZWVIb3N0SWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXJUeXBlPjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dD
UGxhdGZvcm1MYXllckdDR0wuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uYTg3ZTA4ZTgyZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvV0NQbGF0Zm9y
bUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXJH
Q0dMIDogcHVibGljIFdlYkNvcmU6OldDUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgV0NQ
bGF0Zm9ybUxheWVyR0NHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikK
KyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcihpZGVudGlmaWVyKQorICAg
IHsKKyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJiBncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCmluZGV4IGE1
MzQ0MDdkMDM2Ni4uZDFkMmRiOGMwZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCkBAIC00MCw2ICs0MCw5IEBACiAjZWxpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJE
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKICNlbmRpZgorI2lmIFVTRShHUkFQSElD
U19MQVlFUl9XQykKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU3LDYgKzYwLDEwIEBA
IHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYT4gRHJhd2luZ0FyZWE6OmNyZWF0ZShXZWJQYWdl
JiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
IHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRp
bmF0ZWRHcmFwaGljczoKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFDb29y
ZGluYXRlZEdyYXBoaWNzPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKKyNlbmRpZgorI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKyAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6V0M6CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhV0M+KHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwog
I2VuZGlmCiAgICAgfQogCkBAIC0xMDgsNiArMTE1LDEwIEBAIGJvb2wgRHJhd2luZ0FyZWE6OnN1
cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyhEcmF3aW5nQXJlYVR5cGUgdHlwZSkKICNlbGlmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGNhc2Ug
RHJhd2luZ0FyZWFUeXBlOjpDb29yZGluYXRlZEdyYXBoaWNzOgogICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgY2FzZSBEcmF3aW5n
QXJlYVR5cGU6OldDOgorICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDVlMGI5NzU5YzZjYy4uMjlkOTlhYWY5NTJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTEz
Niw2ICsxMzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgYm9vbCBmbHVzaFN5bmNocm9ub3VzbHks
IGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgZmVuY2VQb3J0KSB7IH0KICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeSh1
aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkgeyB9OworI2VuZGlmCisKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKSB7IH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5t
ZXNzYWdlcy5pbgppbmRleCA5ZDVmNmRjYTZlMzguLmIxOTZhOWYwNWQyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW4KQEAgLTQwLDYgKzQwLDEwIEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhIE5vdFJlZkNv
dW50ZWQgewogICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFVw
ZGF0ZUdlb21ldHJ5KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYkNvcmU6OkludFNp
emUgdmlld1NpemUpCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShH
VEspCiAgICAgQWRqdXN0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0
UG9pbnQgb3JpZ2luKQogICAgIENvbW1pdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJD
b3JlOjpGbG9hdFBvaW50IG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi4yNjJmNzQ3Njc1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApAQCAtMCwwICsx
LDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RHJhd2luZ0FyZWFXQy5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eS5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKFdlYlBh
Z2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CisgICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGU6OldDLCBwYXJhbWV0ZXJzLmRyYXdp
bmdBcmVhSWRlbnRpZmllciwgd2ViUGFnZSkKKyAgICAsIG1fcm9vdExheWVyQ2xpZW50KHdlYlBh
Z2UpCisgICAgLCBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KG1ha2VVbmlxdWU8UmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk+KHdlYlBhZ2UsICp0aGlzKSkKKyAgICAsIG1fbGF5ZXJGYWN0
b3J5KCp0aGlzKQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMtPm1fcm9vdExheWVyQ2xpZW50KSkKKyAgICAsIG1fdXBk
YXRlUmVuZGVyaW5nVGltZXIoKnRoaXMsICZEcmF3aW5nQXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcp
CisgICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJEcmF3aW5nQXJlYVdDIENv
bW1pdFF1ZXVlIl9zKSkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZShNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiZHJhd2luZyBhcmVhIHJvb3QiKSk7CisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1
ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNpemUoKSk7CisgICAgbV9y
b290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCitEcmF3aW5nQXJlYVdDOjp+RHJhd2lu
Z0FyZWFXQygpCit7CisgICAgd2hpbGUgKGF1dG8gbGF5ZXIgPSBtX2xpdmVHcmFwaGljc0xheWVy
cy5yZW1vdmVIZWFkKCkpCisgICAgICAgIGxheWVyLT5jbGVhck9ic2VydmVyKCk7Cit9CisKK0dy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVyRmFjdG9yeSgp
Cit7CisgICAgcmV0dXJuICZtX2xheWVyRmFjdG9yeTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
Ojp1cGRhdGVSb290TGF5ZXJzKCkKK3sKKyAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBj
aGlsZHJlbjsKKyAgICBpZiAobV9jb250ZW50TGF5ZXIpIHsKKyAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKCptX2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVy
KQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCptX3ZpZXdPdmVybGF5Um9vdExheWVyKTsK
KyAgICB9CisgICAgbV9yb290TGF5ZXItPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsK
KyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogcm9vdExheWVyKQoreworICAg
IG1fY29udGVudExheWVyID0gcm9vdExheWVyOworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30K
Kwordm9pZCBEcmF3aW5nQXJlYVdDOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IGxheWVy
OworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRM
YXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCit7CisgICAgaWYgKG1faXNSZW5k
ZXJpbmdTdXNwZW5kZWQgPT0gaXNGcm96ZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzUmVu
ZGVyaW5nU3VzcGVuZGVkID0gaXNGcm96ZW47CisgICAgaWYgKCFtX2lzUmVuZGVyaW5nU3VzcGVu
ZGVkICYmIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZl
cnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNlOworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBk
YXRlKCk7CisgICAgfQorfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnVwZGF0ZUdlb21ldHJ5KHVp
bnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIEludFNpemUgdmlld1NpemUpCit7CisgICAgbV9i
YWNraW5nU3RvcmVTdGF0ZUlEID0gYmFja2luZ1N0b3JlU3RhdGVJRDsKKyAgICBtX3dlYlBhZ2Uu
c2V0U2l6ZSh2aWV3U2l6ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNp
emUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAg
ICBtX2RpcnR5UmVnaW9uID0geyB9OworICAgIG1fc2Nyb2xsUmVjdCA9IHsgfTsKKyAgICBtX3Nj
cm9sbE9mZnNldCA9IHsgfTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV93ZWJQYWdlLmJv
dW5kcygpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoaXNDb21wb3NpdGluZ01vZGUoKSkKKyAg
ICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBlbHNl
CisgICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUocmVjdCk7CisgICAgdHJpZ2dlclJlbmRlcmlu
Z1VwZGF0ZSgpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNjcm9sbChjb25zdCBJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAoaXND
b21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChzY3JvbGxSZWN0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHNjcm9sbFJlY3QgIT0g
bV9zY3JvbGxSZWN0KSB7CisgICAgICAgICAgICAvLyBKdXN0IHJlcGFpbnQgdGhlIGVudGlyZSBj
dXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBzY3JvbGwgdGhlIG5ldyByZWN0IGluc3RlYWQuCisg
ICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV9zY3JvbGxSZWN0KTsKKyAgICAgICAg
ICAgIG1fc2Nyb2xsUmVjdCA9IHsgfTsKKyAgICAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0geyB9
OworICAgICAgICB9CisgICAgICAgIC8vIEdldCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVnaW9u
IHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0LgorICAgICAgICBSZWdpb24gZGlydHlSZWdpb25J
blNjcm9sbFJlY3QgPSBpbnRlcnNlY3Qoc2Nyb2xsUmVjdCwgbV9kaXJ0eVJlZ2lvbik7CisgICAg
ICAgIGlmICghZGlydHlSZWdpb25JblNjcm9sbFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGFyZSBpbnNpZGUg
dGhlIHNjcm9sbCByZWN0LgorICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdWJ0cmFjdCB0aGVt
IGZyb20gdGhlIHJlZ2lvbiwgbW92ZSB0aGVtIGFuZCByZS1hZGQgdGhlbS4KKyAgICAgICAgICAg
IG1fZGlydHlSZWdpb24uc3VidHJhY3Qoc2Nyb2xsUmVjdCk7CisgICAgICAgICAgICAvLyBNb3Zl
IHRoZSBkaXJ0eSBwYXJ0cy4KKyAgICAgICAgICAgIFJlZ2lvbiBtb3ZlZERpcnR5UmVnaW9uSW5T
Y3JvbGxSZWN0ID0gaW50ZXJzZWN0KHRyYW5zbGF0ZShkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCwg
c2Nyb2xsRGVsdGEpLCBzY3JvbGxSZWN0KTsKKyAgICAgICAgICAgIC8vIEFuZCBhZGQgdGhlbSBi
YWNrLgorICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5T
Y3JvbGxSZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb21wdXRlIHRoZSBzY3JvbGwgcmVw
YWludCByZWdpb24uCisgICAgICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJh
Y3Qoc2Nyb2xsUmVjdCwgdHJhbnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7CisgICAg
ICAgIG1fZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CisgICAgICAgIG1f
c2Nyb2xsUmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9s
bERlbHRhOworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgfQorfQorCit2
b2lkIERyYXdpbmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKQoreworICAgIGlmICht
X2lzUmVuZGVyaW5nU3VzcGVuZGVkIHx8IG1fd2FpdERpZFVwZGF0ZSkgeworICAgICAgICBtX2hh
c0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobV91cGRhdGVSZW5kZXJpbmdUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgbV91cGRhdGVSZW5kZXJpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwor
c3RhdGljIHZvaWQgZmx1c2hMYXllckltYWdlQnVmZmVycyhXQ1VwYXRlSW5mbyYgaW5mbykKK3sK
KyAgICBmb3IgKGF1dG8mIGxheWVySW5mbyA6IGluZm8uY2hhbmdlZExheWVycykgeworICAgICAg
ICBpZiAobGF5ZXJJbmZvLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gbGF5ZXJJbmZvLmJhY2tpbmdTdG9yZS5pbWFn
ZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gZmx1c2hlciA9IGltYWdlLT5j
cmVhdGVGbHVzaGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRHJhd2luZ0FyZWFXQzo6
aXNDb21wb3NpdGluZ01vZGUoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRMYXllcjsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcoKQoreworICAgIGlmIChtX2lzUmVu
ZGVyaW5nU3VzcGVuZGVkKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUg
PSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBub3QgcmVlbnRyYW50LCBlLmcuIGEgckFGIGNhbGxiYWNrIG1heSBmb3JjZSByZXBhaW50Lgor
ICAgIGlmIChtX2luVXBkYXRlUmVuZGVyaW5nKQorICAgICAgICByZXR1cm47CisgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gY2hhbmdlKG1faW5VcGRhdGVSZW5kZXJpbmcsIHRydWUpOworCisgICAgQVNT
RVJUKCFtX3dhaXREaWRVcGRhdGUpOworICAgIG1fd2FpdERpZFVwZGF0ZSA9IHRydWU7CisKKyAg
ICBtX3dlYlBhZ2UudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgbV93ZWJQYWdlLmZsdXNoUGVuZGlu
Z0VkaXRvclN0YXRlVXBkYXRlKCk7CisKKyAgICBPcHRpb25TZXQ8RmluYWxpemVSZW5kZXJpbmdV
cGRhdGVGbGFncz4gZmxhZ3M7CisgICAgbV93ZWJQYWdlLmZpbmFsaXplUmVuZGVyaW5nVXBkYXRl
KGZsYWdzKTsKKyAgICBtX3dlYlBhZ2UuZGlkVXBkYXRlUmVuZGVyaW5nKCk7CisKKyAgICBpZiAo
aXNDb21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgc2VuZFVwZGF0ZUFDKCk7CisgICAgZWxzZQor
ICAgICAgICBzZW5kVXBkYXRlTm9uQUMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZW5k
VXBkYXRlQUMoKQoreworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJs
YXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNz
TGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlKHsgfSk7CisKKyAgICBtX3VwZGF0ZUluZm8ucm9vdExheWVyID0gbV9y
b290TGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRj
aChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgdXBkYXRlSW5mbyA9IHN0ZDo6ZXhj
aGFuZ2UobV91cGRhdGVJbmZvLCB7IH0pXSgpIG11dGFibGUgeworICAgICAgICBmbHVzaExheWVy
SW1hZ2VCdWZmZXJzKHVwZGF0ZUluZm8pOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHVwZGF0ZUluZm8gPSBXVEZN
b3ZlKHVwZGF0ZUluZm8pXSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5LT51cGRhdGUoV1RGTW92ZSh1cGRhdGVJbmZvKSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRQYWludEJvdW5kc1JlY3QoY29uc3QgSW50UmVj
dCYgYm91bmRzLCBjb25zdCBWZWN0b3I8SW50UmVjdCwgMT4mIHJlY3RzKQoreworICAgIGNvbnN0
IHNpemVfdCByZWN0VGhyZXNob2xkID0gMTA7CisgICAgY29uc3QgZG91YmxlIHdhc3RlZFNwYWNl
VGhyZXNob2xkID0gMC43NTsKKworICAgIGlmIChyZWN0cy5zaXplKCkgPD0gMSB8fCByZWN0cy5z
aXplKCkgPiByZWN0VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBdHRl
bXB0IHRvIGd1ZXNzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHJlZ2lvbiBib3Vu
ZHMgcmVjdCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNv
bXB1dGluZyB0aGUgcGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgYm91bmRzLiBJ
ZiB0aGF0IHdhc3RlZCBzcGFjZQorICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRv
IGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgIHVuc2lnbmVkIGJvdW5kc0Fy
ZWEgPSBib3VuZHMud2lkdGgoKSAqIGJvdW5kcy5oZWlnaHQoKTsKKyAgICB1bnNpZ25lZCByZWN0
c0FyZWEgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlY3RzQXJlYSArPSByZWN0c1tpXS53aWR0aCgpICogcmVjdHNbaV0uaGVpZ2h0
KCk7CisKKyAgICBkb3VibGUgd2FzdGVkU3BhY2UgPSAxIC0gKHN0YXRpY19jYXN0PGRvdWJsZT4o
cmVjdHNBcmVhKSAvIGJvdW5kc0FyZWEpOworICAgIHJldHVybiB3YXN0ZWRTcGFjZSA8PSB3YXN0
ZWRTcGFjZVRocmVzaG9sZDsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZW5kVXBkYXRlTm9u
QUMoKQoreworICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSkgeworICAgICAgICBkaWRV
cGRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0IGJvdW5kcyA9IG1f
ZGlydHlSZWdpb24uYm91bmRzKCk7CisgICAgQVNTRVJUKG1fd2ViUGFnZS5ib3VuZHMoKS5jb250
YWlucyhib3VuZHMpKTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemUgPSBib3VuZHMuc2l6ZSgpOwor
ICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgYml0bWFwU2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7
CisKKyAgICBhdXRvIGltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXIoYml0bWFwU2l6ZSk7CisgICAg
YXV0byByZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKKyAgICBpZiAoc2hvdWxkUGFpbnRC
b3VuZHNSZWN0KGJvdW5kcywgcmVjdHMpKSB7CisgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAg
ICAgIHJlY3RzLmFwcGVuZChib3VuZHMpOworICAgIH0KKyAgICBtX2RpcnR5UmVnaW9uID0geyB9
OworCisgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIHVwZGF0ZUluZm8udmlld1NpemUg
PSBtX3dlYlBhZ2Uuc2l6ZSgpOworICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0b3IgPSBt
X3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cyA9
IHJlY3RzOworICAgIHVwZGF0ZUluZm8uc2Nyb2xsUmVjdCA9IG1fc2Nyb2xsUmVjdDsKKyAgICB1
cGRhdGVJbmZvLnNjcm9sbE9mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OworICAgIG1fc2Nyb2xsUmVj
dCA9IHsgfTsKKyAgICBtX3Njcm9sbE9mZnNldCA9IHsgfTsKKworICAgIGF1dG8mIGdyYXBoaWNz
Q29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoLWJvdW5kcy54KCksIC1ib3VuZHMueSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlY3QgOiByZWN0cykKKyAgICAgICAgbV93ZWJQYWdlLmRyYXdSZWN0KGltYWdlLT5jb250ZXh0
KCksIHJlY3QpOworICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKworICAg
IG1fY29tbWl0UXVldWUtPmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMp
LCBzdGF0ZUlEID0gbV9iYWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1
cGRhdGVJbmZvKSwgaW1hZ2VdKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChhdXRvIGZsdXNoZXIg
PSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQorICAgICAgICAgICAgZmx1c2hlci0+Zmx1c2goKTsK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpLCBzdGF0ZUlELCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1cGRhdGVJbmZvKSwg
aW1hZ2VdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChzdGF0ZUlEICE9IG1fYmFja2luZ1N0b3Jl
U3RhdGVJRCkgeworICAgICAgICAgICAgICAgIGRpZFVwZGF0ZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gc3RhdGlj
X2Nhc3Q8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCY+KCppbWFnZS0+
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCk7
CisgICAgICAgICAgICB1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSA9IHN0ZDo6Z2V0PFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlPihXVEZNb3ZlKGhhbmRsZSkpOworICAgICAgICAgICAgc2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlKHN0YXRlSUQsIFdURk1vdmUodXBkYXRlSW5m
bykpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3Jh
cGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYgbGF5ZXIpCit7CisgICAgbV9saXZlR3Jh
cGhpY3NMYXllcnMuYXBwZW5kKCZsYXllcik7CisgICAgbV91cGRhdGVJbmZvLmFkZGVkTGF5ZXJz
LmFwcGVuZChsYXllci5wcmltYXJ5TGF5ZXJJRCgpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
OjpncmFwaGljc0xheWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmIGxheWVyKQoreworICAgIG1f
bGl2ZUdyYXBoaWNzTGF5ZXJzLnJlbW92ZSgmbGF5ZXIpOworICAgIG1fdXBkYXRlSW5mby5yZW1v
dmVkTGF5ZXJzLmFwcGVuZChsYXllci5wcmltYXJ5TGF5ZXJJRCgpKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVdDOjpjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYgaW5mbykK
K3sKKyAgICBtX3VwZGF0ZUluZm8uY2hhbmdlZExheWVycy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7
Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gRHJhd2luZ0FyZWFXQzo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoRmxvYXRTaXplIHNpemUpCit7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNo
b3VsZFVzZVJlbW90ZVJlbmRlcmluZ0ZvcihSZW5kZXJpbmdQdXJwb3NlOjpET00pKQorICAgICAg
ICByZXR1cm4gbV93ZWJQYWdlLmVuc3VyZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpLmNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIHJl
dHVybiBDb25jcmV0ZUltYWdlQnVmZmVyPFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQ+OjpjcmVhdGUoc2l6ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCks
IFBpeGVsRm9ybWF0OjpCR1JBOCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
ZGlkVXBkYXRlKCkKK3sKKyAgICBtX3dhaXREaWRVcGRhdGUgPSBmYWxzZTsKKyAgICBpZiAobV9o
YXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSkgeworICAgICAgICBtX2hhc0RlZmVycmVkUmVuZGVy
aW5nVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAg
ICB9Cit9CisKK0RyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50
KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKK30KKwordm9p
ZCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpCit7CisgICAgY29udGV4dC5z
YXZlKCk7CisgICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3RUb1BhaW50KSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Zsb2F0IERy
YXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44NzIxNzJkZjJiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKQEAgLTAsMCArMSwx
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEcmF3aW5n
QXJlYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgIlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
aW1lci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFXQyBmaW5h
bAorICAgIDogcHVibGljIERyYXdpbmdBcmVhCisgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllcldD
OjpPYnNlcnZlcgorICAgICwgcHVibGljIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpDbGll
bnQgeworcHVibGljOgorICAgIERyYXdpbmdBcmVhV0MoV2ViUGFnZSYsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKTsKKyAgICB+RHJhd2luZ0FyZWFXQygpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZm9yY2VSZXBhaW50QXN5bmMoV2ViUGFnZSYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0cmlnZ2Vy
UmVuZGVyaW5nVXBkYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0
dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIG92ZXJyaWRlIHsgfQorICAg
IHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOworICAgIGJvb2wg
bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNSZW5k
ZXJpbmdTdXNwZW5kZWQ7IH0KKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2NF90LCBXZWJD
b3JlOjpJbnRTaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Cisg
ICAgLy8gR3JhcGhpY3NMYXllcldDOjpPYnNlcnZlcgorICAgIHZvaWQgZ3JhcGhpY3NMYXllckFk
ZGVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhcGhpY3NMYXllclJl
bW92ZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21taXRMYXllclVw
YXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplKSBvdmVy
cmlkZTsKKyAgICAvLyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50CisgICAgdm9p
ZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNDb21wb3NpdGluZ01vZGUoKTsK
KyAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZygpOworICAgIHZvaWQgc2VuZFVwZGF0ZUFDKCk7Cisg
ICAgdm9pZCBzZW5kVXBkYXRlTm9uQUMoKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsK
KworICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJvb3RMYXllckNsaWVudChXZWJQYWdl
Jik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRC
ZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKyAgICB9OworCisgICAg
Um9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eT4gbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTsK
KyAgICBXQ0xheWVyRmFjdG9yeSBtX2xheWVyRmFjdG9yeTsKKyAgICBEb3VibHlMaW5rZWRMaXN0
PEdyYXBoaWNzTGF5ZXJXQz4gbV9saXZlR3JhcGhpY3NMYXllcnM7CisgICAgV2ViQ29yZTo6VGlt
ZXIgbV91cGRhdGVSZW5kZXJpbmdUaW1lcjsKKyAgICBib29sIG1faXNSZW5kZXJpbmdTdXNwZW5k
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2luVXBkYXRlUmVuZGVyaW5nIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fd2FpdERpZFVwZGF0ZSB7IGZhbHNlIH07CisgICAgV0NVcGF0ZUluZm8gbV91cGRhdGVJbmZv
OworICAgIFJlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgUmVmPFdv
cmtRdWV1ZT4gbV9jb21taXRRdWV1ZTsKKyAgICBpbnQ2NF90IG1fYmFja2luZ1N0b3JlU3RhdGVJ
RCB7IDAgfTsKKyAgICBXZWJDb3JlOjpSZWdpb24gbV9kaXJ0eVJlZ2lvbjsKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1fc2Nyb2xsUmVjdDsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zm
c2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ0MTcyNGRjNzkxYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5jcHAKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJXQy5oIgorCisjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyR0NHTC5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcmFwaGljc0xheWVyV0M6
OkdyYXBoaWNzTGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xp
ZW50LCBPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwg
Y2xpZW50KQorICAgICwgbV9vYnNlcnZlcigmb2JzZXJ2ZXIpCit7CisgICAgbV9vYnNlcnZlci0+
Z3JhcGhpY3NMYXllckFkZGVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllcldDOjp+R3JhcGhp
Y3NMYXllcldDKCkKK3sKKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKKyAgICBpZiAobV9vYnNlcnZl
cikKKyAgICAgICAgbV9vYnNlcnZlci0+Z3JhcGhpY3NMYXllclJlbW92ZWQoKnRoaXMpOworfQor
CitHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhpY3NMYXllcldDOjpnZW5lcmF0
ZUxheWVySUQoKQoreworICAgIC8vIDAgYW5kIG1heCBjYW4ndCBiZSB1c2VkIGZvciBoYXNoIGtl
eXMKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkID0gMTsKKyAg
ICByZXR1cm4gaWQrKzsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdyYXBo
aWNzTGF5ZXJXQzo6cHJpbWFyeUxheWVySUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
SUQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAg
IGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50
UmVjdCh7IHsgfSwgbV9zaXplIH0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdWxkQ2xp
cFRvTGF5ZXIpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUp
OworICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIC8vIEZvciBleGFtcGxlLCBpZiBXZWJH
TCBjYW52YXMgY2hhbmdlZCwgaXQgbmVlZHMgZmx1c2ggdG8gZGlzcGxheS4KKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoeyB9KTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldENo
aWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4pCit7CisgICAgYm9v
bCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihXVEZNb3ZlKGNo
aWxkcmVuKSk7CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICByZXR1cm4gY2hpbGRy
ZW5DaGFuZ2VkOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQoUmVmPEdyYXBo
aWNzTGF5ZXI+JiYgY2hpbGRMYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChX
VEZNb3ZlKGNoaWxkTGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRB
dEluZGV4KFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIsIGludCBpbmRleCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoV1RGTW92ZShjaGlsZExheWVyKSwgaW5k
ZXgpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJl
bik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEJlbG93KFJlZjxHcmFwaGlj
c0xheWVyPiYmIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBzaWJsaW5nKTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZShSZWY8R3JhcGhpY3NMYXll
cj4mJiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoV1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwor
Ym9vbCBHcmFwaGljc0xheWVyV0M6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGls
ZCwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5
ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgV1RGTW92ZShuZXdDaGlsZCkpKSB7CisgICAgICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAobV9wYXJlbnQpCisg
ICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KG1fcGFyZW50KS0+bm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICBHcmFwaGljc0xh
eWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRN
YXNrTGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7CisgICAgaWYgKGxheWVy
ID09IG1fbWFza0xheWVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
TWFza0xheWVyKFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
V0NMYXllckNoYW5nZTo6TWFza0xheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dFJlcGxpY2F0ZWRMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIg
PT0gbV9yZXBsaWNhdGVkTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRSZXBsaWNhdGVkTGF5ZXIobGF5ZXIpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7
CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoV1RGTW92ZShsYXllcikpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgaWYgKHBvaW50ID09IG1fcG9zaXRpb24pCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit7Cisg
ICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwb2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmIChzaXplID09IG1f
c2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJvdW5kc09yaWdpbihjb25zdCBGbG9hdFBv
aW50JiBvcmlnaW4pCit7CisgICAgaWYgKG9yaWdpbiA9PSBtX2JvdW5kc09yaWdpbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJvdW5kc09yaWdpbihvcmlnaW4pOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllcldDOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdCkKK3sKKyAgICBpZiAodCA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQorICAgICAgICByZXR1
cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gbWFza3NUb0JvdW5kcygpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0TWFza3NUb0JvdW5kcyh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7Cisg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzUmVjdCgpKQorICAgICAgICByZXR1
cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHZhbHVlKTsKKyAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0NsaXBwaW5n
UmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHND
bGlwcGluZ1JlY3QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3ND
b250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0Nv
bnRlbnQodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNraW5nU3RvcmUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNW
aXNpYmxlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzQXJlVmlzaWJs
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNp
YmxlKHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6
Q29udGVudHNWaXNpYmxlKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2li
aWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJD
aGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNv
bG9yID09IG1fc29saWRDb2xvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc29saWRDb2xvciA9
IGNvbG9yOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpTb2xp
ZENvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9y
bUxheWVyKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIENvbnRlbnRzTGF5ZXJQdXJwb3Nl
KQoreworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxhdGZvcm1MYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJXQzo6dXNlc0NvbnRlbnRzTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsYXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaG93
RGVidWdCb3JkZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigp
ID09IHNob3cpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93RGVi
dWdCb3JkZXIoc2hvdyk7CisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHdpZHRoKQoreworICAgIG1fZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgIG1fZGVi
dWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBpZiAoaXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKSA9PSBzaG93KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAg
aWYgKCFmaWx0ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29u
c3QgYXV0byYgZmlsdGVyT3BlcmF0aW9uIDogZmlsdGVycy5vcGVyYXRpb25zKCkpIHsKKyAgICAg
ICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJF
TkNFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworICAgIGlmIChHcmFwaGljc0xheWVyOjpmaWx0ZXJz
KCkgPT0gZmlsdGVycykKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CisKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBpZiAoIUdyYXBoaWNzTGF5ZXI6
OnNldEZpbHRlcnMoZmlsdGVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBl
bHNlIGlmIChHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCkuc2l6ZSgpKQorICAgICAgICBjbGVhckZp
bHRlcnMoKTsKKworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpG
aWx0ZXJzKTsKKyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKK30KKworYm9vbCBHcmFw
aGljc0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQoreworICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IGZpbHRlcnNDYW5CZUNv
bXBvc2l0ZWQoZmlsdGVycyk7CisgICAgaWYgKG1fYmFja2Ryb3BGaWx0ZXJzID09IGZpbHRlcnMp
CisgICAgICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworICAgIGlmIChjYW5Db21wb3Np
dGVGaWx0ZXJzKQorICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnMoZmls
dGVycyk7CisgICAgZWxzZQorICAgICAgICBjbGVhckJhY2tkcm9wRmlsdGVycygpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpOwor
ICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBiYWNrZHJv
cEZpbHRlcnNSZWN0KQoreworICAgIGlmIChtX2JhY2tkcm9wRmlsdGVyc1JlY3QgPT0gYmFja2Ry
b3BGaWx0ZXJzUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJh
Y2tkcm9wRmlsdGVyc1JlY3QoYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5
ZXJDaGFuZ2U+IGZsYWdzKQoreworICAgIGlmIChiZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgYm9vbCBuZWVkc0ZsdXNoID0gIW1fdW5jb21taXR0ZWRDaGFuZ2VzOworICAg
IG1fdW5jb21taXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7CisgICAgaWYgKG5lZWRzRmx1c2gpCisg
ICAgICAgIGNsaWVudCgpLm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIG1hc2stPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoYXV0byogcmVw
bGljYSA9IHJlcGxpY2FMYXllcigpKQorICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAg
ICBjaGlsZC0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAg
aWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworICAgIFdDTGF5ZXJV
cGF0ZUluZm8gdXBkYXRlOworICAgIHVwZGF0ZS5pZCA9IHByaW1hcnlMYXllcklEKCk7CisgICAg
dXBkYXRlLmNoYW5nZXMgPSBzdGQ6OmV4Y2hhbmdlKG1fdW5jb21taXR0ZWRDaGFuZ2VzLCB7IH0p
OworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7Cisg
ICAgICAgIHVwZGF0ZS5jaGlsZHJlbiA9IFdURjo6bWFwKGNoaWxkcmVuKCksIFtdKGF1dG8mIGxh
eWVyKSB7CisgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisgICAg
ICAgIH0pOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpN
YXNrTGF5ZXIpIHsKKyAgICAgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICAgICAgdXBkYXRl
Lm1hc2tMYXllciA9IG1hc2tMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB1cGRhdGUubWFza0xheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAg
ICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXll
ciA9IHJlcGxpY2FMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB1cGRhdGUucmVwbGljYUxheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICBp
ZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICB1
cGRhdGUucG9zaXRpb24gPSBwb3NpdGlvbigpOworICAgICAgICB1cGRhdGUuYW5jaG9yUG9pbnQg
PSBhbmNob3JQb2ludCgpOworICAgICAgICB1cGRhdGUuc2l6ZSA9IHNpemUoKTsKKyAgICAgICAg
dXBkYXRlLmJvdW5kc09yaWdpbiA9IGJvdW5kc09yaWdpbigpOworICAgIH0KKyAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAgICAgdXBkYXRl
LnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1JlY3Qg
PSBjb250ZW50c1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgdXBkYXRlLmNvbnRlbnRzQ2xpcHBpbmdS
ZWN0ID0gY29udGVudHNDbGlwcGluZ1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1Zp
c2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgIHVwZGF0ZS5iYWNrZmFj
ZVZpc2liaWxpdHkgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICB1cGRhdGUubWFza3NU
b0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpICYm
IGNvbnRlbnRzQXJlVmlzaWJsZSgpICYmICFzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBhdXRvIGltYWdlID0gbV9vYnNlcnZlci0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSgpKTsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IHsgeyB9LCBzaXplKCkgfTsKKyAgICAgICAg
ICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGltYWdlLT5jb250ZXh0KCksIGNsaXBSZWN0
KTsKKyAgICAgICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKyAgICAg
ICAgICAgIHVwZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkp
OworCisgICAgICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAgICAgICAgICAgIHVw
ZGF0ZS5jaGFuZ2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworICAgICAgICB9
CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29s
b3IpCisgICAgICAgIHVwZGF0ZS5zb2xpZENvbG9yID0gbV9zb2xpZENvbG9yOworICAgIGlmICh1
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykgeworICAgICAgICB1
cGRhdGUuc2hvd0RlYnVnQm9yZGVyID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKKyAgICAgICAg
dXBkYXRlLmRlYnVnQm9yZGVyQ29sb3IgPSBtX2RlYnVnQm9yZGVyQ29sb3I7CisgICAgICAgIHVw
ZGF0ZS5kZWJ1Z0JvcmRlcldpZHRoID0gbV9kZWJ1Z0JvcmRlcldpZHRoOworICAgIH0KKyAgICBp
ZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAg
ICAgdXBkYXRlLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7
CisgICAgICAgIHVwZGF0ZS5yZXBhaW50Q291bnQgPSByZXBhaW50Q291bnQoKTsKKyAgICB9Cisg
ICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAg
dXBkYXRlLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUudHJhbnNmb3JtID0gdHJhbnNm
b3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW5U
cmFuc2Zvcm0pCisgICAgICAgIHVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJh
bnNmb3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVy
cykKKyAgICAgICAgdXBkYXRlLmZpbHRlcnMgPSBmaWx0ZXJzKCk7CisgICAgaWYgKHVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAgICAgIHVwZGF0
ZS5iYWNrZHJvcEZpbHRlcnMgPSBiYWNrZHJvcEZpbHRlcnMoKTsKKyAgICAgICAgdXBkYXRlLmJh
Y2tkcm9wRmlsdGVyc1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7CisgICAgfQorICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0
Zm9ybUxheWVyKS0+Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciA9IDA7CisgICAgfQorICAgIG1fb2JzZXJ2ZXItPmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1v
dmUodXBkYXRlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFiNWVjNDcwOTExMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5
ZXJXQy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV0NVcGF0ZUluZm8u
aCIKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgR3JhcGhpY3NMYXllcldDIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIsIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxHcmFwaGljc0xheWVyV0M+IHsK
K3B1YmxpYzoKKyAgICBzdHJ1Y3QgT2JzZXJ2ZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgZ3Jh
cGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNzTGF5ZXJXQyYpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdExheWVyVXBhdGVJbmZvKFdDTGF5ZXJVcGF0ZUluZm8mJikgPSAw
OworICAgICAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplKSA9IDA7CisgICAgfTsKKworICAgIEdyYXBoaWNz
TGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYsIE9i
c2VydmVyJik7CisgICAgfkdyYXBoaWNzTGF5ZXJXQygpIG92ZXJyaWRlOworCisgICAgdm9pZCBj
bGVhck9ic2VydmVyKCkgeyBtX29ic2VydmVyID0gbnVsbHB0cjsgfQorCisgICAgLy8gR3JhcGhp
Y3NMYXllcgorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBwcmlt
YXJ5TGF5ZXJJRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29u
dGVudHNOZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICBib29sIHNldENoaWxkcmVuKFZlY3Rv
cjxSZWY8R3JhcGhpY3NMYXllcj4+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVm
PEdyYXBoaWNzTGF5ZXI+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KFJl
ZjxHcmFwaGljc0xheWVyPiYmLCBpbnQgaW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hp
bGRBYm92ZShSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykgb3Zl
cnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KFJlZjxHcmFwaGljc0xheWVyPiYmLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsKKyAgICBib29sIHJlcGxhY2VDaGlsZChHcmFw
aGljc0xheWVyKiBvbGRDaGlsZCwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xheWVyPiYmKTsKKyAgICB2b2lkIHNldFJlcGxpY2F0
ZWRMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihS
ZWZQdHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNpemUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCb3VuZHNPcmln
aW4oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c0Ns
aXBwaW5nUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250
ZW50c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxp
dHkoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNUb1BsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciosIENvbnRlbnRzTGF5ZXJQdXJwb3NlKSBvdmVycmlkZTsK
KyAgICBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdXNlc0NvbnRlbnRzTGF5
ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcihib29sKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwg
ZmxvYXQgd2lkdGgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvd1JlcGFpbnRDb3VudGVyKGJv
b2wpIG92ZXJyaWRlOworICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRCYWNrZHJvcEZpbHRlcnMoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2Ry
b3BGaWx0ZXJzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+KTsKKworICAgIHN0YXRpYyBH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgZ2VuZXJhdGVMYXllcklEKCk7CisKKyAgICBm
cmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxHcmFwaGljc0xheWVyV0M+Owor
CisgICAgR3JhcGhpY3NMYXllcldDKiBtX3ByZXY7CisgICAgR3JhcGhpY3NMYXllcldDKiBtX25l
eHQ7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1fbGF5ZXJJ
RCB7IGdlbmVyYXRlTGF5ZXJJRCgpIH07CisgICAgT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CisgICAg
UGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyIHsgbnVsbHB0ciB9OworICAgIFdlYkNvcmU6
OkNvbG9yIG1fc29saWRDb2xvcjsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2RlYnVnQm9yZGVyQ29s
b3I7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IG1fdW5jb21taXR0ZWRDaGFuZ2VzOwor
ICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
V0NCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dD
QmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4z
NGY1MDAyZjU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQmFja2luZ1N0b3JlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ0JhY2tpbmdTdG9yZSgpIHsgfQorICAgIFdlYkNv
cmU6OkltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldEltYWdlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4mJiBpbWFnZSkgeyBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShpbWFnZSk7IH0KKyAgICBTaGFy
ZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLmdldCgpOyB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBib29sIGhhc0ltYWdlQnVmZmVyID0gbV9pbWFn
ZUJ1ZmZlcjsKKyAgICAgICAgZW5jb2RlciA8PCBoYXNJbWFnZUJ1ZmZlcjsKKyAgICAgICAgaWYg
KGhhc0ltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqbV9pbWFnZUJ1ZmZl
ci0+ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
KCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NCYWNraW5nU3RvcmUmIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGJvb2wgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaGFzSW1hZ2VCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoaGFzSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0Lm1fYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc3RkOjpnZXQ8U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGU+KGhhbmRsZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZm
ZXI7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjRiNTY2ODdiMmI4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQ0xheWVy
RmFjdG9yeS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dDTGF5ZXJGYWN0b3J5OjpXQ0xh
eWVyRmFjdG9yeShHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJiBvYnNlcnZlcikKKyAgICA6IG1f
b2JzZXJ2ZXIob2JzZXJ2ZXIpCit7Cit9CisKK1JlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBX
Q0xheWVyRmFjdG9yeTo6Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzTGF5ZXJXQyhsYXllclR5cGUsIGNs
aWVudCwgbV9vYnNlcnZlcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjEyZDJiZTUxMWI5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXll
ckZhY3RvcnkuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NMYXll
ckZhY3RvcnkgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkgewor
cHVibGljOgorICAgIFdDTGF5ZXJGYWN0b3J5KEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXImKTsK
KworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQorICAgIFJl
ZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmKSBvdmVycmlk
ZTsKKworICAgIEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ1VwYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNDk0YzZmMDU4ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFp
dHMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIGNsYXNzIFdDTGF5ZXJDaGFuZ2UgOiB1aW50MzJfdCB7CisgICAgQ2hpbGRyZW4gICAg
ICAgICAgICAgICAgPSAxIDw8ICAwLAorICAgIE1hc2tMYXllciAgICAgICAgICAgICAgID0gMSA8
PCAgMSwKKyAgICBSZXBsaWNhTGF5ZXIgICAgICAgICAgICA9IDEgPDwgIDIsCisgICAgR2VvbWV0
cnkgICAgICAgICAgICAgICAgPSAxIDw8ICAzLAorICAgIFByZXNlcnZlczNEICAgICAgICAgICAg
ID0gMSA8PCAgNCwKKyAgICBDb250ZW50c1Zpc2libGUgICAgICAgICA9IDEgPDwgIDUsCisgICAg
QmFja2ZhY2VWaXNpYmlsaXR5ICAgICAgPSAxIDw8ICA2LAorICAgIE1hc2tzVG9Cb3VuZHMgICAg
ICAgICAgID0gMSA8PCAgNywKKyAgICBTb2xpZENvbG9yICAgICAgICAgICAgICA9IDEgPDwgIDgs
CisgICAgRGVidWdWaXN1YWxzICAgICAgICAgICAgPSAxIDw8ICA5LAorICAgIFJlcGFpbnRDb3Vu
dCAgICAgICAgICAgID0gMSA8PCAxMCwKKyAgICBDb250ZW50c1JlY3QgICAgICAgICAgICA9IDEg
PDwgMTEsCisgICAgQ29udGVudHNDbGlwcGluZ1JlY3QgICAgPSAxIDw8IDEyLAorICAgIE9wYWNp
dHkgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKKyAgICBCYWNraW5nU3RvcmUgICAgICAgICAg
ICA9IDEgPDwgMTQsCisgICAgVHJhbnNmb3JtICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
IENoaWxkcmVuVHJhbnNmb3JtICAgICAgID0gMSA8PCAxNiwKKyAgICBGaWx0ZXJzICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTcsCisgICAgQmFja2Ryb3BGaWx0ZXJzICAgICAgICAgPSAxIDw8IDE4
LAorICAgIFBsYXRmb3JtTGF5ZXIgICAgICAgICAgID0gMSA8PCAxOSwKK307CisKK3N0cnVjdCBX
Q0xheWVyVXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgaWQ7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IGNoYW5nZXM7CisgICAgVmVj
dG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gY2hpbGRyZW47Cisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+
IG1hc2tMYXllcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRD4gcmVwbGljYUxheWVyOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9z
aXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBzaXplOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm91bmRzT3JpZ2lu
OworICAgIGJvb2wgbWFza3NUb0JvdW5kczsKKyAgICBib29sIHNob3dEZWJ1Z0JvcmRlcjsKKyAg
ICBib29sIHNob3dSZXBhaW50Q291bnRlcjsKKyAgICBib29sIGNvbnRlbnRzVmlzaWJsZTsKKyAg
ICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICBib29sIHByZXNlcnZlczNEOworICAgIFdl
YkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdCb3JkZXJD
b2xvcjsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGg7Cisg
ICAgaW50IHJlcGFpbnRDb3VudDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udGVudHNSZWN0
OworICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0
ZXJzOworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJzOworICAg
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAgICBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OworICAgIHVpbnQ2NF90
IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGVuY29kZXIgPDwgaWQ7CisgICAgICAgIGVuY29kZXIgPDwgY2hhbmdlczsKKyAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgY2hpbGRyZW47CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFz
a0xheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNrTGF5ZXI7CisgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKQorICAgICAgICAgICAgZW5jb2Rl
ciA8PCByZXBsaWNhTGF5ZXI7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
R2VvbWV0cnkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHBvc2l0aW9uIDw8IGFuY2hvclBvaW50
IDw8IHNpemUgPDwgYm91bmRzT3JpZ2luOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OlByZXNlcnZlczNEKQorICAgICAgICAgICAgZW5jb2RlciA8PCBwcmVzZXJ2ZXMzRDsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzVmlzaWJsZTsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgICAgICBlbmNv
ZGVyIDw8IGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNrc1RvQm91
bmRzOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHNvbGlkQ29sb3I7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBzaG93
RGVidWdCb3JkZXIgPDwgZGVidWdCb3JkZXJDb2xvciA8PCBkZWJ1Z0JvcmRlcldpZHRoOworICAg
ICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc2hvd1JlcGFpbnRDb3VudGVyIDw8IHJlcGFpbnRDb3VudDsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QpCisgICAgICAgICAg
ICBlbmNvZGVyIDw8IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY29u
dGVudHNDbGlwcGluZ1JlY3Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
T3BhY2l0eSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgb3BhY2l0eTsKKyAgICAgICAgaWYgKGNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBlbmNvZGVy
IDw8IGJhY2tpbmdTdG9yZTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpU
cmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKKyAgICAgICAgaWYg
KGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmlsdGVyczsKKyAg
ICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGJhY2tkcm9wRmlsdGVycyA8PCBiYWNrZHJvcEZpbHRlcnNSZWN0
OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDTGF5ZXJVcGF0ZUluZm8mIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuY2hhbmdlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubWFza0xheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVy
KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXBsaWNhTGF5ZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucG9zaXRpb24pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFuY2hv
clBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHNPcmlnaW4p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkgeworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucHJlc2VydmVzM0QpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpIHsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnRzVmlzaWJsZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYmFja2ZhY2VWaXNpYmlsaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6TWFza3NUb0JvdW5kcykgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQubWFza3NUb0JvdW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNv
bGlkQ29sb3IpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNvbGlk
Q29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpIHsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3dEZWJ1Z0JvcmRlcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuZGVidWdCb3JkZXJDb2xvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGVidWdCb3JkZXJX
aWR0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkgeworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvd1JlcGFpbnRDb3VudGVyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5yZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c1JlY3QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmNvbnRlbnRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xp
cHBpbmdSZWN0KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250
ZW50c0NsaXBwaW5nUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkp
IHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9wYWNpdHkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQudHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRy
ZW5UcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNo
aWxkcmVuVHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykg
eworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlsdGVycykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5iYWNrZHJvcEZpbHRlcnNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxh
dGZvcm1MYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RydWN0IFdD
VXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
cm9vdExheWVyOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQ+IGFkZGVkTGF5ZXJzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQ+IHJlbW92ZWRMYXllcnM7CisgICAgVmVjdG9yPFdDTGF5ZXJVcGF0ZUlu
Zm8+IGNoYW5nZWRMYXllcnM7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVy
IDw8IHJvb3RMYXllcjsKKyAgICAgICAgZW5jb2RlciA8PCBhZGRlZExheWVyczsKKyAgICAgICAg
ZW5jb2RlciA8PCByZW1vdmVkTGF5ZXJzOworICAgICAgICBlbmNvZGVyIDw8IGNoYW5nZWRMYXll
cnM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+CisgICAgc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ1VwYXRlSW5m
byYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucm9v
dExheWVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYWRkZWRMYXllcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZW1vdmVkTGF5ZXJzKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
Y2hhbmdlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJLaXQ6OldD
TGF5ZXJDaGFuZ2UsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4sCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6TWFza0xheWVyLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hh
bmdlOjpHZW9tZXRyeSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMz
RCwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUsCisgICAg
ICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5LAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMsCisgICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6U29saWRDb2xvciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpE
ZWJ1Z1Zpc3VhbHMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UmVwYWludENvdW50
LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCwKKyAgICAgICAg
V2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCwKKyAgICAgICAgV2Vi
S2l0OjpXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U6OkJhY2tpbmdTdG9yZSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zv
cm0sCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0sCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RmlsdGVycywKKyAgICAgICAgV2ViS2l0OjpX
Q0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCmluZGV4IGViNDBiNGM2NmRkOC4uNDlhM2Y0MWVm
NjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKQEAgLTQ0LDYgKzQ0LDcgQEAgU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NBSVJPIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0NGIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIgT04p
CitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR1JBUEhJQ1NfTEFZRVJfV0MgT04pCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX09QRU5HTF9FUyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfT1BFTkdMX0VT
XzMgT04pCg==
</data>
<flag name="commit-queue"
          id="466791"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442526</attachid>
            <date>2021-10-26 13:47:50 -0700</date>
            <delta_ts>2021-10-26 22:34:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wc-2021-10-27.diff</filename>
            <type>text/plain</type>
            <size>154052</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOTAwMTYxMDY3YzQuLmRm
YWMxNWUzNzU0MyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDIxLTEwLTI2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBw
cm9jZXNzIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZToKKwogMjAyMS0xMC0yMSAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgR2l0
SHViIG5hbWUgdG8gY29udHJpYnV0b3JzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYzc2NWI4MGJiY2Uu
LjgyNzdiMDEzZmM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTEwLTI2ICBG
dWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5D
YWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBwcm9jZXNzIG1vZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODMwOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eUJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93Yy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNl
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlCYXNlOjpzZXRQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KTogRGlzcGxheUxpc3QKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGRvZXNuJ3QgaGF2ZSBhIEhEQy4gRG8gbm90aGluZyBmb3IgRGlz
cGxheUxpc3QKKyAgICAgICAgY29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6
OnBhaW50Q3VycmVudEZyYW1lKToKKyAgICAgICAgUGFpbnQgYSBmcmFtZSBieSB1c2luZyBHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSBpbnN0ZWFkIG9mCisgICAgICAgIENhaXJvIEFQ
SSBmb3IgRGlzcGxheUxpc3QuCisKIDIwMjEtMTAtMjEgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hl
bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRoZSBpbnRyaXNpYyBzaXplIG9mIHBpY3R1cmUgaW1h
Z2UgaW5zaWRlIGEgdGVtcGxhdGUgaXMgYWx3YXlzIHplcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdp
bkNhaXJvLmNtYWtlCmluZGV4IGQyMjU2OTBmNWUwNC4uNWRkYWQ5YzI1OGUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfTElCUkFS
SUVTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2Yi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ncmFwaGljcy93YyIKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBA
IC0yNCw2ICsyNSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCiAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdD
LmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJv
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJv
V2luLmNwcApAQCAtNDQsNiArNDcsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCiApCiAKK2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUworICAgIHBsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZv
cm1MYXllci5oCispCisKIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgY29tY3Rs
MzIKICAgICBjcnlwdDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAK
aW5kZXggZjBjOGU0ZTQ1NGQzLi5kYzBjNTVlMjNkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5QmFzZS5jcHAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSAiSU9TdXJm
YWNlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIiAvLyB+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2UgbmVlZHMgaXQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
QmFzZShjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKQpAQCAtMTMwLDcg
KzEzNCw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OmluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBhdmFpbGFibGVFeHRlbnNpCiAgICAgICAgIG1fcmVxdWVzdGFibGVF
eHRlbnNpb25zLmFkZChleHRlbnNpb24pOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lm
ICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHUkFQSElDU19MQVlFUl9XQykKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaAppbmRleCBkOWM3MzNiNmMzNGUuLmYx
ZWVkNWY0YzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oCkBAIC05
Niw2ICs5Niw5IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5Q
dHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IG1fZGlzcGxheUJ1ZmZlcjsKKyNlbGlmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB2
b2lkIHNldFBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllckNvbnRhaW5lciYmKTsKKyAgICBQbGF0
Zm9ybUxheWVyQ29udGFpbmVyIG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5QmFzZVdDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLmVlZDk1YTNmN2QxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3Bw
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlCYXNlLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJM
RShXRUJHTCkgJiYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQor
CitQbGF0Zm9ybUxheWVyKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllci5nZXQoKTsKK30K
Kwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6c2V0UGxhdGZvcm1MYXll
cihQbGF0Zm9ybUxheWVyQ29udGFpbmVyJiYgcGxhdGZvcm1MYXllcikKK3sKKyAgICBtX3BsYXRm
b3JtTGF5ZXIgPSBXVEZNb3ZlKHBsYXRmb3JtTGF5ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3djL1dDUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5jYTM5ZTA4Y2NjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXQ1BsYXRmb3Jt
TGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwcml2YXRlOgorICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgZmluYWwg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5k
ZXggZDVhM2JhOTQzOGE5Li5kODYxYjkxNTBjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBA
IC01Myw2ICs1Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJp
dG1hcCkKIAogSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50
UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKKyAgICBpZiAoIWhhc1Bs
YXRmb3JtQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBIREMgaGRjID0gbnVsbHB0
cjsKICNpZiAhVVNFKENBSVJPKQogICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
LT5tX2hkYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKaW5kZXggZTZkZWI1ZWMxMDM4Li5jOWQwOGM3YmUyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCkBAIC0yODU3LDE1ICsyODU3LDExIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRl
cjo6cGFpbnRDdXJyZW50RnJhbWUoV2ViCiAgICAgICAgIEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBD
QUlST19GT1JNQVRfSU5WQUxJRCk7CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJ
RCkKLSAgICAgICAgICAgIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgs
IGhlaWdodCwgcGl0Y2gpOwotCi0gICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250
ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gY29u
dGV4dC5zdGF0ZSgpOwotICAgICAgICAgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIGlm
IChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkgeworICAgICAgICAgICAgYXV0
byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhl
aWdodCwgcGl0Y2gpKTsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUoc3VyZmFjZSkpOworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwg
MCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgq
aW1hZ2UsIHNyY1JlY3Quc2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0KICNl
bHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGltcGxlbWVudCBkcmF3aW5nIG9mIERpcmVj
dDNEIHN1cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJk
ZC4uNTEwZDJhZTllMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNiBAQAorMjAyMS0xMC0yNiAg
RnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2lu
Q2Fpcm9dIE5ldyBHcmFwaGljc0xheWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBHcmFwaGlj
c0xheWVyIGltcGxlbWVudGF0aW9uIEdyYXBoaWNzTGF5ZXJXQyB3aGljaAorICAgICAgICB0cmFu
c2ZlcnMgR3JhcGhpY3NMYXllciB0cmVlIHRvIEdQVSBwcm9jZXNzIGFuZCBydW5zIHRoZQorICAg
ICAgICBjb21wb3NpdG9yIChUZXh0dXJlTWFwcGVyKSBpbiBHUFUgcHJvY2Vzcy4KKworICAgICAg
ICBJbiBHUFUgcHJvY2VzcyBtb2RlLCBXZWJHTCBpcyBydW4gaW4gR1BVIHByb2Nlc3MuIFNvLCB0
aGUKKyAgICAgICAgY29tcG9zaXRvciBzaG91bGQgYmUgcnVuIGluIEdQVSBwcm9jZXNzLiBPdGhl
cndpc2UsIHRoZSBvdXRwdXQKKyAgICAgICAgdGV4dHVyZSBvZiBXZWJHTCBoYXMgdG8gYmUgdHJh
bnNmZXJyZWQgZnJvbSBHUFUgcHJvY2VzcyB0byB0aGUKKyAgICAgICAgY29tcG9zaXRvciBwcm9j
ZXNzIChVSSBwcm9jZXNzIG9yIHdlYiBwcm9jZXNzKS4KKworICAgICAgICBCZWNhdXNlIEFOR0xF
IGlzbid0IHRocmVhZC1zYWZlLCB0aGUgY29tcG9zaXRvciBhbmQgV2ViR0wgc2hvdWxkCisgICAg
ICAgIGJlIHJ1biBpbiB0aGUgc2FtZSB0aHJlYWQgaW4gR1BVIHByb2Nlc3MuCisKKyAgICAgICAg
RW5hYmxpbmcgZ3B1X3Byb2Nlc3Nfd2ViZ2wgYWxzbyBlbmFibGVzIEdQVSBwcm9jZXNzIGNvbXBv
c2l0aW5nIG5vdy4KKyAgICAgICAgPiByZWcgYWRkIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJl
XFdlYktpdCAvdiBncHVfcHJvY2Vzc193ZWJnbCAvdCBSRUdfRFdPUkQgL2QgMSAvZgorCisgICAg
ICAgIGdwdV9wcm9jZXNzX2NhbnZhc19yZW5kZXJpbmcgY2FuIGFsc28gYmUgZW5hYmxlZC4KKyAg
ICAgICAgPiByZWcgYWRkIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVf
cHJvY2Vzc19jYW52YXNfcmVuZGVyaW5nIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAg
RW5hYmxpbmcgZ3B1X3Byb2Nlc3NfZG9tX3JlbmRlcmluZyBpcyBzdGlsbCBleHBlcmltZW50YWwu
CisgICAgICAgID4gcmVnIGFkZCBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQgL3Yg
Z3B1X3Byb2Nlc3NfZG9tX3JlbmRlcmluZyAvdCBSRUdfRFdPUkQgL2QgMSAvZgorCisgICAgICAg
IFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgcmVzdG9yZSB0aGUgbm9uLUdQVSBwcm9jZXNzIG1vZGUu
CisgICAgICAgID4gcmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQg
L3YgZ3B1X3Byb2Nlc3NfY2FudmFzX3JlbmRlcmluZyAvZgorICAgICAgICA+IHJlZyBkZWxldGUg
SEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNzX3dlYmdsIC9m
CisgICAgICAgID4gcmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQg
L3YgZ3B1X3Byb2Nlc3NfZG9tX3JlbmRlcmluZyAvZgorCisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJUcmVlSG9zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFw
aGljc0NvbnRleHRHTCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzOjpzaGFyZWRTY2VuZUNvbnRleHQpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJj
ZXNSZXF1ZXN0OjpzY2hlZHVsZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyk6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6flJlbW90ZVdDTGF5
ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xh
eWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lmg6IEFkZGVkLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V0NTY2VuZTo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OldDU2NlbmU6On5XQ1NjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V0NTY2VuZTo6
dXBkYXRlKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaDogQWRk
ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lQ29udGV4dDo6V0NTY2VuZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KToK
KyAgICAgICAgKFdlYktpdDo6V0NTY2VuZUNvbnRleHQ6OmNyZWF0ZVRleHR1cmVNYXBwZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lQ29udGV4dDo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuaDogQWRkZWQuCisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OmVuc3Vy
ZUhvbGRlckZvcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldDU2hhcmVkU2NlbmVDb250ZXh0
SG9sZGVyOjpyZW1vdmVIb2xkZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2luL0dQVVByb2Nl
c3NNYWluV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc01haW4pOgorICAgICAg
ICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6Cisg
ICAgICAgIChjb25kaXRpb25zX2Zvcl9oZWFkZXIpOgorICAgICAgICAqIFNoYXJlZC9EcmF3aW5n
QXJlYUluZm8uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6RHJhd2luZ0Fy
ZWFQcm94eVdDKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjpwYWludCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6c2l6ZURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjppbmNvcnBvcmF0ZVVwZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6ZGlzY2FyZEJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnBhaW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2Mv
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6On5SZW1vdGVXQ0xh
eWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9z
dFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNjb25uZWN0
R3B1UHJvY2Vzc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmRpZFVw
ZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5Ojp3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5t
ZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2Mv
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMKToKKyAgICAg
ICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWE6OnN1cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5n
QXJlYVdDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OkRyYXdp
bmdBcmVhV0MpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjp+RHJhd2luZ0FyZWFX
Qyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9vdExheWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TGF5ZXJUcmVlU3Rh
dGVJc0Zyb3plbik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnVwZGF0ZUdlb21l
dHJ5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFXQzo6dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OmZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVdDOjppc0NvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6
OnVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNlbmRV
cGRhdGVBQyk6CisgICAgICAgIChXZWJLaXQ6OnNob3VsZFBhaW50Qm91bmRzUmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNlbmRVcGRhdGVOb25BQyk6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZCk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8pOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVdDOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6
OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZpY2VTY2FsZUZhY3RvciBj
b25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaDog
QWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OkdyYXBoaWNzTGF5
ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6fkdyYXBoaWNzTGF5ZXJX
Qyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Z2VuZXJhdGVMYXllcklEKToK
KyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpwcmltYXJ5TGF5ZXJJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbik6CisgICAg
ICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViS2l0
OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNz
TGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpyZW1v
dmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRNYXNr
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0ZWRM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0UmVwbGljYXRlZEJ5
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRBbmNob3JQb2ludCk6CisgICAg
ICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Qm91bmRzT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6R3Jh
cGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVu
dHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c0Ns
aXBwaW5nUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldEJhY2tmYWNlVmlz
aWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNU
b1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENvbnRl
bnRzVG9QbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjp1
c2VzQ29udGVudHNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
OjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0
U2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6ZmlsdGVyc0NhbkJlQ29tcG9z
aXRlZCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0RmlsdGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BGaWx0ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L0dyYXBoaWNzTGF5ZXJXQy5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvV0NCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0
b3JlOjpXQ0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpzZXRJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpiaXRtYXAgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6V0NCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldD
TGF5ZXJGYWN0b3J5OjpXQ0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldDTGF5ZXJG
YWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvV0NMYXllckZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDVXBhdGVJbmZvLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBh
dGVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZv
OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ1VwYXRlSW5mbzo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V0NVcGF0ZUluZm86OmRlY29kZSk6CisKIDIwMjEtMTAtMjEgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
d2VicHVzaGQgcGxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBmYjIwN2M0NjM2Y2QuLmU5NmZhZmUwOTll
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
U2VjdXJpdHlPcmlnaW4uaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
I2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMzMCw2ICszMzQsMzAgQEAg
dm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb25maWd1cmVMb2dnaW5nQ2hhbm5lbChj
b25zdCBTdHJpbmcmIGNoYW5uZWxOYW0KICNlbmRpZgogfQogCisjaWYgVVNFKEdSQVBISUNTX0xB
WUVSX1dDKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVXQ0xheWVyVHJl
ZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2
NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcmVtb3RlV0NMYXll
clRyZWVIb3N0TWFwLmVuc3VyZShpZGVudGlmaWVyLCBbJl0oKSB7CisgICAgICAgIHJldHVybiBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShpZGVudGlmaWVyKSwg
bmF0aXZlV2luZG93KTsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAucmVtb3ZlKGlk
ZW50aWZpZXIpOworfQorCitSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIGF1dG8gaXRlciA9IG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZmlu
ZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX3JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaXRlci0+dmFs
dWUuZ2V0KCk7Cit9CisjZW5kaWYKKwogYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjph
bGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBy
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWFwLnZhbHVl
cygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaAppbmRleCA5YzUyMzY0MTQyMjQuLmVhMzVjYjQ0MzU0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
CkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvVENDU1BJLmg+CiAj
ZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJXQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwpAQCAtOTEsNiArOTUs
MTAgQEAgc3RydWN0IE1lZGlhT3ZlcnJpZGVzRm9yVGVzdGluZzsKIHN0cnVjdCBSZW1vdGVBdWRp
b1Nlc3Npb25Db25maWd1cmF0aW9uOwogc3RydWN0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVh
dGlvblBhcmFtZXRlcnM7CiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCitjbGFzcyBSZW1v
dGVXQ0xheWVyVHJlZUhvc3Q7CisjZW5kaWYKKwogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcwogICAgIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+CiAgICAgLCBwdWJsaWMgV2Vi
Q29yZTo6Tm93UGxheWluZ01hbmFnZXI6OkNsaWVudApAQCAtMTYxLDYgKzE2OSwxMCBAQCBwdWJs
aWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlByb3h5
KCk7CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBSZWZQdHI8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworI2VuZGlmCisKICAgICB2b2lkIHVwZGF0ZVN1cHBvcnRl
ZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNz
dXJlKCkgY29uc3Q7CkBAIC0yMjYsNiArMjM4LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBj
b25maWd1cmVMb2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBXVEZMb2dDaGFubmVsU3RhdGUs
IFdURkxvZ0xldmVsKTsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB2b2lkIGNy
ZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVp
bnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgdm9pZCByZWxlYXNlV0NMYXllclRyZWVIb3N0KFdl
YktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcik7CisjZW5kaWYKKwogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBm
aW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKQEAgLTMwNSw2ICszMjIsMTEgQEAgcHJpdmF0ZToK
ICAgICB1c2luZyBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXAgPSBIYXNoTWFwPFJlbW90
ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVB
dWRpb0hhcmR3YXJlTGlzdGVuZXJQcm94eT4+OwogICAgIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0
ZW5lck1hcCBtX3JlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcDsKIAorI2lmIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKKyAgICB1c2luZyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgPSBIYXNo
TWFwPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xh
eWVyVHJlZUhvc3Q+PjsKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAgbV9yZW1vdGVXQ0xh
eWVyVHJlZUhvc3RNYXA7CisjZW5kaWYKKwogICAgIFJlZlB0cjxSZW1vdGVSZW1vdGVDb21tYW5k
TGlzdGVuZXJQcm94eT4gbV9yZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXI7CiAgICAgYm9vbCBt
X2lzQWN0aXZlTm93UGxheWluZ1Byb2Nlc3MgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCmluZGV4IGMxYmY4MDE5Y2VhYi4uMzkxYzE5ZmU5ZDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbgpAQCAtNTEsNiArNTEsMTAgQEAgbWVzc2FnZXMgLT4gR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAgICAgUmVsZWFzZVJlbW90
ZUNvbW1hbmRMaXN0ZW5lcihXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcklkZW50
aWZpZXIgaWRlbnRpZmllcikKICAgICBTZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKFZlY3RvcjxT
dHJpbmc+IGxhbmd1YWdlcykKICAgICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hh
bm5lbE5hbWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWlu
dDhfdCBXVEZMb2dMZXZlbCBsZXZlbCkKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAg
Q3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBp
ZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAgUmVsZWFzZVdDTGF5ZXJUcmVl
SG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllcikKKyNlbmRp
ZgogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVQcm9jZXNzLmgKaW5kZXggNTQxZjViMGZmMmNkLi5hNzI2ZDdlMTJiYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaApAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xk
ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOb3dQbGF5aW5nTWFu
YWdlcjsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CkBAIC05Miw2ICs5NiwxMCBAQCBwdWJsaWM6
CiAgICAgV29ya1F1ZXVlJiBsaWJXZWJSVENDb2RlY3NRdWV1ZSgpOwogI2VuZGlmCiAKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXImIHNo
YXJlZFNjZW5lQ29udGV4dCgpIHsgcmV0dXJuIG1fc2hhcmVkU2NlbmVDb250ZXh0OyB9CisjZW5k
aWYKKwogI2lmIEVOQUJMRShWUDkpCiAgICAgdm9pZCBlbmFibGVWUDlEZWNvZGVycyhib29sIHNo
b3VsZEVuYWJsZVZQOERlY29kZXIsIGJvb2wgc2hvdWxkRW5hYmxlVlA5RGVjb2RlciwgYm9vbCBz
aG91bGRFbmFibGVWUDlTV0RlY29kZXIpOwogI2VuZGlmCkBAIC0xODQsNiArMTkyLDEwIEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9saWJXZWJSVENDb2RlY3NRdWV1ZTsKICNl
bmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFdDU2hhcmVkU2NlbmVDb250
ZXh0SG9sZGVyIG1fc2hhcmVkU2NlbmVDb250ZXh0OworI2VuZGlmCisKICAgICBzdHJ1Y3QgR1BV
U2Vzc2lvbiB7CiAgICAgICAgIFN0cmluZyBtZWRpYUNhY2hlRGlyZWN0b3J5OwogI2lmIEVOQUJM
RShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCBlZjQx
ZWE2MDgyYmEuLmEwNzI5NzY1Y2I1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTY3LDYg
KzY3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKICNl
bmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsg
fQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYpOwogICAg
IHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2Vi
R0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmluZGV4
IDMyNmIwN2YyZWJkZS4uNWE2Y2U2NWU3NDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5k
ZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNDIsMTAgKzQyLDEyIEBAIHN0YXRpYyBib29s
IGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzOwogCiB2b2lkIFNjb3BlZFdl
YkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6c2NoZWR1bGVGcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMoKQogeworI2lmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAgICAgaWYgKGRpZFNj
aGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2Vz
VGltZW91dCwgZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKTsKICAgICBkaWRTY2hlZHVsZUZy
ZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyA9IHRydWU7CisjZW5kaWYKIH0KIAogdm9pZCBTY29w
ZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZyZWVXZWJHTFJlbmRlcmluZ1Jlc291
cmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
UmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uYzQ4YzBiYWI5MTk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xB
WUVSX1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgIkdQVVByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgor
I2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5l
Y3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXQ1NjZW5lLmgiCisjaW5jbHVkZSAiV0NVcGF0
ZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiByZW1vdGVHcmFwaGljc0NvbnRleHRH
TFN0cmVhbVdvcmtRdWV1ZSgpOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVI
b3N0PiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQoreworICAgIHJldHVybiBt
YWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4oY29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
aWRlbnRpZmllciwgbmF0aXZlV2luZG93KTsKK30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0OjpS
ZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVjdGlv
blRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKKyAgICA6IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vz
cyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CisgICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihjb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmdwdVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5lbnN1cmVIb2xkZXJGb3JXaW5kb3co
bmF0aXZlV2luZG93KSkKK3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRy
ZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpLCAq
dGhpcyk7CisgICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4oKTsKKyAgICByZW1vdGVH
cmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtzY2VuZSA9IG1fc2Nl
bmUuZ2V0KCksIGdsQ29udGV4dEhvbGRlciA9IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmdl
dCgpLCBuYXRpdmVXaW5kb3ddIHsKKyAgICAgICAgaWYgKCFnbENvbnRleHRIb2xkZXItPmNvbnRl
eHQpCisgICAgICAgICAgICBnbENvbnRleHRIb2xkZXItPmNvbnRleHQuZW1wbGFjZShuYXRpdmVX
aW5kb3cpOworICAgICAgICBzY2VuZS0+aW5pdGlhbGl6ZSgqZ2xDb250ZXh0SG9sZGVyLT5jb250
ZXh0KTsKKyAgICB9KTsKK30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0Ojp+UmVtb3RlV0NMYXll
clRyZWVIb3N0KCkKK3sKKyAgICBBU1NFUlQobV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKTsKKyAg
ICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICBhdXRvIGdsQ29udGV4
dEhvbGRlciA9IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Z3B1UHJvY2VzcygpLnNoYXJlZFNj
ZW5lQ29udGV4dCgpLnJlbW92ZUhvbGRlcihtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1
ZSgpLmRpc3BhdGNoKFtnbENvbnRleHRIb2xkZXIgPSBXVEZNb3ZlKGdsQ29udGV4dEhvbGRlciks
IHNjZW5lID0gV1RGTW92ZShtX3NjZW5lKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gRGVzdHJv
eSBzY2VuZSBvbiB0aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZC4KKyAgICAgICAgc2NlbmUgPSBu
dWxscHRyOworICAgICAgICAvLyBnbENvbnRleHRIb2xkZXIgY2FuIGJlIGRlc3Ryb3llZCBvbiB0
aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZCBiZWNhdXNlIGl0IGhhc09uZVJlZi4KKyAgICB9KTsK
K30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fY29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+Y29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZGVu
dGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRh
dGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCit7CisgICAgYXV0byByZW1vdGVHQ0dMID0gV1RGOjpt
YXAodXBkYXRlLmNoYW5nZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXllclVwZGF0ZSkgLT4gUmVm
UHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiB7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgeworICAgICAgICAgICAgaWYg
KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wobWFrZU9iamVjdElkZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyVHlw
ZT4obGF5ZXJVcGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICByZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQ
dHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBkYXRl
KSwgcmVtb3RlR0NHTCA9IFdURk1vdmUocmVtb3RlR0NHTCldKCkgbXV0YWJsZSB7CisgICAgICAg
IHNjZW5lLT51cGRhdGUoV1RGTW92ZSh1cGRhdGUpLCBXVEZNb3ZlKHJlbW90ZUdDR0wpKTsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9z
dFByb3h5OjpEaWRVcGRhdGUoKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVX
Q0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjMyOGRiM2RkYjQyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBl
cjsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworY2xhc3MgV0NTY2VuZTsKK3N0cnVjdCBXQ1VwYXRlSW5mbzsKKworY2xh
c3MgUmVtb3RlV0NMYXllclRyZWVIb3N0IDogcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBw
cml2YXRlIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRyZWVIb3N0KTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4gY3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgUmVtb3RlV0NMYXllclRyZWVI
b3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgflJlbW90ZVdDTGF5ZXJUcmVl
SG9zdCgpOworICAgIC8vIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRl
SW5mbyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgSVBDOjpDb25uZWN0aW9uKiBt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXZWFrUHRy
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAg
ICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWZQdHI8V0NT
aGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OkhvbGRlcj4gbV9zaGFyZWRTY2VuZUNvbnRleHRIb2xk
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDU2NlbmU+IG1fc2NlbmU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMjUxNmZkYTQxOTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCittZXNzYWdlcyAt
PiBSZW1vdGVXQ0xheWVyVHJlZUhvc3QgTm90UmVmQ291bnRlZCB7CisgICAgVXBkYXRlKHN0cnVj
dCBXZWJLaXQ6OldDVXBhdGVJbmZvIHVwZGF0ZUluZm8pCit9CisKKyNlbmRpZiAvLyBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NTY2VuZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4y
NTE3MTBjYTIzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDU2NlbmUuaCIKKworI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgi
CisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllcik7CitwdWJsaWM6CisgICAgTGF5ZXIo
KSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50
CisgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHRleG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIobnVsbHB0cik7CisgICAgfQor
ICAgIHZvaWQgc2V0UGxhdGZvcm1MYXllck5lZWRzRGlzcGxheSgpIG92ZXJyaWRlIHsgfQorCisg
ICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRleG1hcExheWVyOworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOworfTsKKwordm9pZCBX
Q1NjZW5lOjppbml0aWFsaXplKFdDU2NlbmVDb250ZXh0JiBjb250ZXh0KQoreworICAgIC8vIFRo
ZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdMIGNv
bnRleHQuCisgICAgbV9jb250ZXh0ID0gJmNvbnRleHQ7CisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVRl
eHR1cmVNYXBwZXIoKTsKK30KKworV0NTY2VuZTo6V0NTY2VuZSgpID0gZGVmYXVsdDsKKworV0NT
Y2VuZTo6fldDU2NlbmUoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKK30KKwordm9pZCBXQ1NjZW5lOjp1cGRh
dGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gaWQgOiB1cGRhdGUu
YWRkZWRMYXllcnMpIHsKKyAgICAgICAgYXV0byBsYXllciA9IG1ha2VVbmlxdWU8TGF5ZXI+KCk7
CisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikpOworICAgIH0KKworICAg
IGF1dG8gcmVtb3RlR0NHTEl0ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdpbigpOworCisgICAgZm9y
IChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGF1
dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOworICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAg
ICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAobGF5ZXJVcGRhdGUuY2hp
bGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZtX2xheWVycy5n
ZXQoaWQpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikgewor
ICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIgPSBudWxscHRyOworICAg
ICAgICAgICAgaWYgKGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAgICAgICAgICAgICBtYXNr
TGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5ZXIpLT50ZXhtYXBMYXll
cjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRNYXNrTGF5ZXIobWFza0xheWVy
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBy
ZXBsaWNhTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLnJlcGxp
Y2FMYXllcikKKyAgICAgICAgICAgICAgICByZXBsaWNhTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCps
YXllclVwZGF0ZS5yZXBsaWNhTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5
KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJVcGRh
dGUucG9zaXRpb24pOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEFuY2hvclBv
aW50KGxheWVyVXBkYXRlLmFuY2hvclBvaW50KTsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBM
YXllci5zZXRTaXplKGxheWVyVXBkYXRlLnNpemUpOworICAgICAgICAgICAgbGF5ZXItPnRleG1h
cExheWVyLnNldEJvdW5kc09yaWdpbihsYXllclVwZGF0ZS5ib3VuZHNPcmlnaW4pOworICAgICAg
ICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UHJl
c2VydmVzM0QpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UHJlc2VydmVzM0Qo
bGF5ZXJVcGRhdGUucHJlc2VydmVzM0QpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRDb250ZW50c1JlY3QobGF5ZXJVcGRhdGUuY29udGVudHNSZWN0KTsKKyAgICAg
ICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBw
aW5nUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0NsaXBw
aW5nUmVjdChsYXllclVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7CisgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzVmlzaWJsZShsYXllclVwZGF0
ZS5jb250ZW50c1Zpc2libGUpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUuYmFja2ZhY2VWaXNpYmls
aXR5KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpN
YXNrc1RvQm91bmRzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tzVG9C
b3VuZHMobGF5ZXJVcGRhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAgIGlmIChsYXllclVwZGF0
ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBh
dXRvIGJpdG1hcCA9IGxheWVyVXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRtYXAoKTsKKyAgICAgICAg
ICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0g
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGltYWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAgICAgIGxh
eWVyLT5iYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsIGltYWdl
LmdldCgpLCBiaXRtYXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6ZSgpIH0pOworICAgICAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobGF5ZXItPmJhY2tp
bmdTdG9yZS5nZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxh
eWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xp
ZENvbG9yKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFNvbGlkQ29sb3IobGF5
ZXJVcGRhdGUuc29saWRDb2xvcik7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldERlYnVnVmlzdWFscyhsYXllclVwZGF0ZS5zaG93RGVidWdCb3JkZXIsIGxheWVyVXBk
YXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyV2lkdGgpOworICAg
ICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3Vu
dCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBhaW50Q291bnRlcihsYXll
clVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJlcGFpbnRDb3VudCk7Cisg
ICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkK
KyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRPcGFjaXR5KGxheWVyVXBkYXRlLm9w
YWNpdHkpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRUcmFuc2Zvcm0o
bGF5ZXJVcGRhdGUudHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50
ZXhtYXBMYXllci5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclVwZGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
RmlsdGVycykKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRGaWx0ZXJzKGxheWVy
VXBkYXRlLmZpbHRlcnMpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmJhY2tkcm9wRmlsdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tk
cm9wTGF5ZXIucmVzZXQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlm
ICghbGF5ZXItPmJhY2tkcm9wTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tkcm9wTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldENv
bnRlbnRzVmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9w
TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExheWVyLT5zZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmJh
Y2tkcm9wRmlsdGVycyk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNl
dFNpemUobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0UG9zaXRpb24obGF5ZXJVcGRh
dGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BMYXllcihsYXllci0+
YmFja2Ryb3BMYXllci5nZXQoKSk7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0
QmFja2Ryb3BGaWx0ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0KTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJhdG9yKSB7
CisgICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpyZW1vdGVHQ0dMSXRlcmF0
b3IpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0
Q2xpZW50KGxheWVyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29u
dGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKG51bGxwdHIpOworICAg
ICAgICB9CisgICAgICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAgIH0KKyAgICBBU1NFUlQo
cmVtb3RlR0NHTEl0ZXJhdG9yID09IHJlbW90ZUdDR0wuZW5kKCkpOworCisgICAgZm9yIChhdXRv
IGlkIDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7
CisKKyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBkYXRlLnJvb3RMYXllcikt
PnRleG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHko
TW9ub3RvbmljVGltZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZXhwYW5k
ZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRv
d1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX3RleHR1cmVNYXBw
ZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICByb290TGF5ZXItPnBhaW50KCptX3RleHR1cmVNYXBw
ZXIpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5KCptX3RleHR1cmVNYXBw
ZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIG1fY29udGV4
dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDU2NlbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmMwMDQ2OTI5NWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXI7CitjbGFzcyBUZXh0
dXJlTWFwcGVyTGF5ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDsK
K2NsYXNzIFdDU2NlbmVDb250ZXh0Oworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBXQ1Nj
ZW5lIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShXQ1NjZW5lKTsKK3B1YmxpYzoKKyAgICBXQ1NjZW5lKCk7CisgICAgfldDU2NlbmUoKTsK
KyAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQmKTsKKyAgICB2b2lkIHVwZGF0ZShX
Q1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPj4mJik7
CisKK3ByaXZhdGU6CisgICAgc3RydWN0IExheWVyOworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50
NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVyPj4gTGF5ZXJNYXA7CisKKyAgICBXQ1NjZW5lQ29u
dGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworICAgIExheWVyTWFwIG1fbGF5ZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NT
Y2VuZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
U2NlbmVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmQ0ZjBjOTBjYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQu
aCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgPFdlYkNvcmUvR0xD
b250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0NTY2VuZUNvbnRleHQ6
OldDU2NlbmVDb250ZXh0KHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBtX2dsQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWludGVycHJldF9jYXN0PEdM
TmF0aXZlV2luZG93VHlwZT4obmF0aXZlV2luZG93KSk7Cit9CisKK1dDU2NlbmVDb250ZXh0Ojp+
V0NTY2VuZUNvbnRleHQoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgV0NTY2VuZUNvbnRleHQ6Om1ha2VD
b250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IFdD
U2NlbmVDb250ZXh0OjpjcmVhdGVUZXh0dXJlTWFwcGVyKCkKK3sKKyAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwordm9pZCBXQ1NjZW5lQ29udGV4dDo6c3dhcEJ1ZmZl
cnMoKQoreworICAgIG1fZ2xDb250ZXh0LT5zd2FwQnVmZmVycygpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZjRhNTJmMWZkOTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NT
Y2VuZUNvbnRleHQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBlcjsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdDU2NlbmVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXQ1NjZW5lQ29udGV4dCk7Citw
dWJsaWM6CisgICAgV0NTY2VuZUNvbnRleHQodWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+
V0NTY2VuZUNvbnRleHQoKTsKKworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IGNyZWF0ZVRleHR1cmVNYXBw
ZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NoYXJlZFNjZW5lQ29u
dGV4dEhvbGRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2hh
cmVkU2NlbmVDb250ZXh0SG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi45YjE3ZmZjM2NhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIuaApAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKKy8vIENyZWF0aW5nIGEgV0NTY2VuZUNvbnRleHQgZm9yIGEgd2luZG93IGZhaWxzIGlm
IHRoZSB3aW5kb3cgYWxyZWFkeQorLy8gaGFzIG9uZS4gV2hpbGUgbmF2aWdhdGluZyB0byBhIG5l
dyBwYWdlIHdpdGggYSBuZXcgV2ViUHJvY2VzcywgdGhlCisvLyBwcm92aXNpb25hbCBXZWJLaXQ6
OldlYlBhZ2UgaW4gdGhlIG5ldyBXZWJQcm9jZXNzIGhhcyB0aGUgc2FtZQorLy8gd2luZG93IGhh
bmRsZS4gV0NTY2VuZUNvbnRleHQgc2hvdWxkIGJlIHNoYXJlZCBhbW9uZyBhbGwKKy8vIFJlbW90
ZVdDTGF5ZXJUcmVlSG9zdHMgdGhhdCByZW5kZXIgdG8gdGhlIHNhbWUgbmF0aXZlIHdpbmRvdy4K
K2NsYXNzIFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcik7CitwdWJsaWM6CisgICAgV0NTaGFyZWRT
Y2VuZUNvbnRleHRIb2xkZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1Y3QgSG9sZGVyIDogUmVm
Q291bnRlZDxIb2xkZXI+IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
OworICAgICAgICBpbnQ2NF90IG5hdGl2ZVdpbmRvdzsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBtZW1iZXIgaXMgYWNjZXNzZWQgaW4gdGhlIE9wZW5HTCB0aHJlYWQKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxXQ1NjZW5lQ29udGV4dD4gY29udGV4dDsKKyAgICB9OworCisgICAgUmVmPEhvbGRl
cj4gZW5zdXJlSG9sZGVyRm9yV2luZG93KGludDY0X3QgbmF0aXZlV2luZG93KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X2hhc2guYWRkKG5hdGl2ZVdpbmRvdywgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpIAorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICBhdXRvIGhvbGRlciA9IGFkb3B0UmVmKCpuZXcgSG9sZGVyKTsKKyAgICAgICAgaG9s
ZGVyLT5uYXRpdmVXaW5kb3cgPSBuYXRpdmVXaW5kb3c7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBob2xkZXIucHRyKCk7CisgICAgICAgIHJldHVybiBob2xkZXI7CisgICAgfQor
CisgICAgUmVmUHRyPEhvbGRlcj4gcmVtb3ZlSG9sZGVyKFJlZjxIb2xkZXI+JiYgaG9sZGVyKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCFo
b2xkZXItPmhhc09uZVJlZigpKSAKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBtX2hhc2gucmVtb3ZlKGhvbGRlci0+bmF0aXZlV2luZG93KTsKKyAgICAgICAgcmV0dXJuIGhv
bGRlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxpbnQ2NF90LCBIb2xkZXIqPiBt
X2hhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4v
R1BVUHJvY2Vzc01haW5XaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQ
cm9jZXNzTWFpbldpbi5jcHAKaW5kZXggZjAxZTYzOWQ5ZDc4Li4yNzIzNGNiZmI1ZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3Bw
CkBAIC0zMCwxNCArMzAsMzEgQEAKIAogI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgi
CiAjaW5jbHVkZSAiR1BVUHJvY2Vzcy5oIgorI2luY2x1ZGUgPE9iamJhc2UuaD4KKyNpbmNsdWRl
IDx3dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJSQVJZKHVzZXIzMik7CitT
T0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dCwg
Qk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRFWFQpKTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3NNYWluV2luIGZpbmFsOiBwdWJsaWMgQXV4
aWxpYXJ5UHJvY2Vzc01haW5CYXNlTm9TaW5nbGV0b248R1BVUHJvY2Vzcz4geworcHVibGljOgor
ICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKQorICAgICAgICAgICAgU2V0UHJv
Y2Vzc0RwaUF3YXJlbmVzc0NvbnRleHRQdHIoKShEUElfQVdBUkVORVNTX0NPTlRFWFRfUEVSX01P
TklUT1JfQVdBUkVfVjIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBTZXRQcm9jZXNzRFBJ
QXdhcmUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfTsKIAogaW50IEdQVVByb2Nl
c3NNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyAgICAvLyBmb3IgRGlyZWN0WAorICAg
IEhSRVNVTFQgaHIgPSA6OkNvSW5pdGlhbGl6ZUV4KG51bGxwdHIsIENPSU5JVF9NVUxUSVRIUkVB
REVEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICByZXR1cm4gQXV4
aWxpYXJ5UHJvY2Vzc01haW48R1BVUHJvY2Vzc01haW5XaW4+KGFyZ2MsIGFyZ3YpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAwMTU2NWQ1NTA2OTcuLmFiNWEyZGYwOGVhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMSw2ICsxMSwxMCBAQCBhZGRfZGVmaW5pdGlvbnMo
LURCVUlMRElOR19XRUJLSVQpCiBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCiAKKyAgICBHUFVQ
cm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKKyAgICBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NjZW5lQ29udGV4dC5jcHAKKwogICAgIEdQVVByb2Nlc3MvbWVkaWEvd2luL1JlbW90ZU1lZGlh
UGxheWVyUHJveHlXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldp
bi5jcHAKQEAgLTY5LDYgKzczLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAg
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKIAorICAg
IFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCisKICAgICBVSVByb2Nlc3Mvd2lu
L1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94
eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKQEAgLTc2LDYg
KzgyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3Mvd2luL1dl
YlByb2Nlc3NQb29sV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKIAorICAg
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cAorCiAgICAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvd2luL1ZpZGVvTGF5ZXJSZW1vdGVXaW4uY3Bw
CiAKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5j
cHAKQEAgLTk1LDYgKzEwMywxMCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0
ZWRHcmFwaGljcy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9EcmF3aW5nQXJlYVdDLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGlj
c0xheWVyV0MuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNw
cAorCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAogCiAgICAgV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0xMDIsNiArMTE0LDcgQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVMKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL2dyYXBoaWNzL3djIgog
ICAgICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vUGxhdGZvcm0vZ2VuZXJpYyIKICAgICAiJHtXRUJLSVRfRElSfS9QbHVnaW5Qcm9jZXNzL3dp
biIKQEAgLTExOSwxNiArMTMyLDI1IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvd2luIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgorICAgICIke1dFQktJVF9E
SVJ9L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbiIKICAgICAiJHtX
RUJLSVRfRElSfS93aW4iCiApCiAKK2xpc3QoQVBQRU5EIFdlYktpdF9NRVNTQUdFU19JTl9GSUxF
UworICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0CisKKyAg
ICBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eQor
KQorCiBzZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVN9KQogc2V0KFdlYktpdENvbW1vblN5c3RlbUluY2x1ZGVEaXJlY3RvcmllcyAk
e1dlYktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRkMWFkN2UxNS4uMzc1NGFlNDQ3NDVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTM1Nyw2ICszNTcs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAg
ICAnV2ViS2l0OjpUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50Q29udHJvbGxl
cklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
WFJEZXZpY2VJZGVudGlmaWVyJywKQEAgLTM2OCw2ICszNjksNyBAQCBkZWYgY29uZGl0aW9uc19m
b3JfaGVhZGVyKGhlYWRlcik6CiAgICAgICAgICciSW5wdXRNZXRob2RTdGF0ZS5oIic6IFsiUExB
VEZPUk0oR1RLKSIsICJQTEFURk9STShXUEUpIl0sCiAgICAgICAgICciTGF5ZXJIb3N0aW5nQ29u
dGV4dC5oIic6IFsiUExBVEZPUk0oQ09DT0EpIiwgXSwKICAgICAgICAgJyJHZXN0dXJlVHlwZXMu
aCInOiBbIlBMQVRGT1JNKElPU19GQU1JTFkpIl0sCisgICAgICAgICciV0NMYXllclRyZWVIb3N0
SWRlbnRpZmllci5oIic6IFsiVVNFKEdSQVBISUNTX0xBWUVSX1dDKSJdLAogICAgICAgICAnPFdl
YkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaD4nOiBbIkVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpIl0sCiAgICAgICAgICc8V2ViQ29yZS9EYXRhRGV0ZWN0b3JUeXBlLmg+
JzogWyJFTkFCTEUoREFUQV9ERVRFQ1RJT04pIl0sCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9E
cmF3aW5nQXJlYUluZm8uaAppbmRleCA3OWY1M2Y1M2RjZjkuLjcyMmI1ZjM0YjAwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKQEAgLTM3LDcgKzM3LDEwIEBAIGVudW0g
Y2xhc3MgRHJhd2luZ0FyZWFUeXBlIDogdWludDhfdCB7CiAjZW5kaWYKICAgICBSZW1vdGVMYXll
clRyZWUsCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01B
UFBFUikKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljcywK
KyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBXQywKICNlbmRpZgogfTsK
ICAgICAKQEAgLTYzLDYgKzY2LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJL
aXQ6OkRyYXdpbmdBcmVhVHlwZT4gewogICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBl
OjpSZW1vdGVMYXllclRyZWUKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNF
KFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpDb29y
ZGluYXRlZEdyYXBoaWNzCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAg
ICAgICwgV2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU6OldDCiAjZW5kaWYKICAgICA+OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjFhNzdmYzM2NmIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94
eVdDLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVh
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9SZWdpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworRHJhd2luZ0FyZWFQcm94eVdDOjpEcmF3aW5nQXJlYVByb3h5V0MoV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHJveHksIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKKyAgICA6IERyYXdp
bmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlOjpXQywgd2ViUGFnZVByb3h5LCBwcm9jZXNzKQor
eworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBSZWdpb24m
IHVucGFpbnRlZFJlZ2lvbikKK3sKKyAgICB1bnBhaW50ZWRSZWdpb24gPSByZWN0OworCisgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3Jl
LT5wYWludChjb250ZXh0LCByZWN0KTsKKyAgICB1bnBhaW50ZWRSZWdpb24uc3VidHJhY3QoSW50
UmVjdChJbnRQb2ludCgpLCBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpKSk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKCkKK3sKKyAgICBkaXNjYXJkQmFja2luZ1N0
b3JlKCk7CisgICAgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCsrOworICAgIHNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjpVcGRhdGVHZW9tZXRyeShtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlELCBtX3NpemUpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OnVwZGF0ZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQoreworICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEID09IG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQpCisgICAgICAgIGluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOworICAgIHNl
bmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEaWRVcGRhdGUoKSk7Cit9CisKK3ZvaWQgRHJhd2lu
Z0FyZWFQcm94eVdDOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJh
Y2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQoreworICAgIGRpc2Nh
cmRCYWNraW5nU3RvcmUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OmluY29ycG9y
YXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgaWYgKHVwZGF0
ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLmVtcGxhY2UodXBk
YXRlSW5mby52aWV3U2l6ZSwgdXBkYXRlSW5mby5kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdl
UHJveHkpOworCisgICAgbV9iYWNraW5nU3RvcmUtPmluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUlu
Zm8pOworCisgICAgUmVnaW9uIGRhbWFnZVJlZ2lvbjsKKyAgICBpZiAodXBkYXRlSW5mby5zY3Jv
bGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB1cGRh
dGVJbmZvLnVwZGF0ZVJlY3RzKQorICAgICAgICAgICAgZGFtYWdlUmVnaW9uLnVuaXRlKHJlY3Qp
OworICAgIH0gZWxzZQorICAgICAgICBkYW1hZ2VSZWdpb24gPSBJbnRSZWN0KEludFBvaW50KCks
IG1fd2ViUGFnZVByb3h5LnZpZXdTaXplKCkpOworICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdO
ZWVkc0Rpc3BsYXkoZGFtYWdlUmVnaW9uKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6
OmRpc2NhcmRCYWNraW5nU3RvcmUoKQoreworICAgIG1fYmFja2luZ1N0b3JlID0gc3RkOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5hMTQ3YzExY2Y0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBSZWdpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEcmF3aW5nQXJl
YVByb3h5V0MgZmluYWwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CitwdWJsaWM6CisgICAg
RHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYsIFdlYlByb2Nlc3NQcm94eSYpOworCisg
ICAgdm9pZCBwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6UmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pOwor
Citwcml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhUHJveHkKKyAgICB2b2lkIGRldmljZVNjYWxl
RmFjdG9yRGlkQ2hhbmdlKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkg
b3ZlcnJpZGU7CisgICAgLy8gbWVzc2FnZSBoYW5kZXJzCisgICAgdm9pZCB1cGRhdGUodWludDY0
X3QsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUodWludDY0X3QsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKworICAgIHZvaWQg
aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZvaWQgZGlzY2FyZEJh
Y2tpbmdTdG9yZSgpOworCisgICAgdWludDY0X3QgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCB7IDAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDIyMDg5OGMxMjJmYy4uYzc5NzA2YTEyNGI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgogCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5V0MuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5V2luLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4u
aCIKQEAgLTQ3LDYgKzQ4LDggQEAgUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdlYlZp
ZXcmIHZpZXcpCiAvLyBQYWdlQ2xpZW50J3MgcHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucwogc3RkOjp1
bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5n
QXJlYVByb3h5KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKKyAgICBpZiAobV92aWV3LnBh
Z2UoKS0+cHJlZmVyZW5jZXMoKS51c2VHUFVQcm9jZXNzRm9yV2ViR0xFbmFibGVkKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhUHJveHlXQz4oKm1fdmlldy5wYWdlKCks
IHByb2Nlc3MpOwogICAgIHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhUHJveHlDb29yZGlu
YXRlZEdyYXBoaWNzPigqbV92aWV3LnBhZ2UoKSwgcHJvY2Vzcyk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAppbmRleCAxZGZmNGNjNjgzZWEuLjBjN2Y0MGNiNDlm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcApAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHlXQy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgpAQCAtNDkxLDMx
ICs0OTIsNDMgQEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3BhZ2UtPmVuZFByaW50aW5nKCk7Ci0gICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0g
c3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MqPihtX3BhZ2Ut
PmRyYXdpbmdBcmVhKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcG9ydCBXZWJL
aXQxJ3MgcmVjdCBjb2FsZXNjaW5nIGxvZ2ljIGhlcmUuCi0gICAgICAgIFJlZ2lvbiB1bnBhaW50
ZWRSZWdpb247CisgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkgeworICAgICAgICBhdXRv
IHBhaW50ZXIgPSBbJl0oYXV0byBkcmF3aW5nQXJlYSkgeworICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2NpbmcgbG9naWMgaGVyZS4KKyAg
ICAgICAgICAgIFJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CiAjaWYgVVNFKENBSVJPKQotICAgICAg
ICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb193aW4zMl9zdXJmYWNlX2NyZWF0ZSho
ZGMpOwotICAgICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwot
Ci0gICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFpbnRl
ZFJlZ2lvbik7Ci0KLSAgICAgICAgY2Fpcm9fZGVzdHJveShjb250ZXh0KTsKLSAgICAgICAgY2Fp
cm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotI2Vsc2UKLSAgICAgICAgQ09NUHRyPElEM0Qx
MVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFp
bi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsK
LSAgICAgICAgICAgIEJhY2tpbmdTdG9yZTo6RFhDb25uZWN0aW9ucyBjb250ZXh0IHsgbV9pbW1l
ZGlhdGVDb250ZXh0LmdldCgpLCBiYWNrQnVmZmVyLmdldCgpIH07CisgICAgICAgICAgICBjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb193aW4zMl9zdXJmYWNlX2NyZWF0ZShoZGMpOwor
ICAgICAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAg
ICAKICAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVu
cGFpbnRlZFJlZ2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N3YXBDaGFpbi0+UHJlc2Vu
dCgwLCAwKTsgCisgICAgCisgICAgICAgICAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOworICAg
ICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworI2Vsc2UKKyAgICAgICAg
ICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAorICAgICAgICAgICAgSFJF
U1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVy
ZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAorICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgICAgICBCYWNraW5nU3RvcmU6OkRY
Q29ubmVjdGlvbnMgY29udGV4dCB7IG1faW1tZWRpYXRlQ29udGV4dC5nZXQoKSwgYmFja0J1ZmZl
ci5nZXQoKSB9OworICAgICAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBk
aXJ0eVJlY3QsIHVucGFpbnRlZFJlZ2lvbik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAg
ICAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsgCiAjZW5kaWYKLQotICAgICAgICBhdXRv
IHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVkUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIGZvciAo
YXV0byYgcmVjdCA6IHVucGFpbnRlZFJlY3RzKQotICAgICAgICAgICAgZHJhd1BhZ2VCYWNrZ3Jv
dW5kKGhkYywgbV9wYWdlLmdldCgpLCByZWN0KTsKKyAgICAKKyAgICAgICAgICAgIGF1dG8gdW5w
YWludGVkUmVjdHMgPSB1bnBhaW50ZWRSZWdpb24ucmVjdHMoKTsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcmVjdCA6IHVucGFpbnRlZFJlY3RzKQorICAgICAgICAgICAgICAgIGRyYXdQYWdlQmFj
a2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgcmVjdCk7CisgICAgICAgIH07CisgICAgICAgIHN3
aXRjaCAobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBEcmF3
aW5nQXJlYVR5cGU6OldDOgorICAgICAgICAgICAgcGFpbnRlcihzdGF0aWNfY2FzdDxEcmF3aW5n
QXJlYVByb3h5V0MqPihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0ZWRHcmFwaGljczoKKyAg
ICAgICAgICAgIHBhaW50ZXIoc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVk
R3JhcGhpY3MqPihtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGhkYywgbV9wYWdl
LmdldCgpLCBkaXJ0eVJlY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eS5jcHAKaW5kZXggMzFkNzlmOWYxZDMwLi4xMTQyMTY2ZDJlMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcApAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmg+CiAjZW5k
aWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5
ZXJHQ0dMLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNjIsNiArNjYsOSBAQCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KEdQVVByb2Nlc3NDb25uZWN0aW9uJgogICAg
IC8vIFRPRE86IFdlIG11c3Qgd2FpdCB1bnRpbCBpbml0aWFsaXplZCwgYmVjYXVzZSBhdCB0aGUg
bW9tZW50IHdlIGNhbm5vdCByZWNlaXZlIElQQyBtZXNzYWdlcwogICAgIC8vIGR1cmluZyB3YWl0
IHdoaWxlIGluIHN5bmNocm9ub3VzIHN0cmVhbSBzZW5kLiBTaG91bGQgYmUgZml4ZWQgYXMgcGFy
dCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjExLgogICAg
IHdhaXRVbnRpbEluaXRpYWxpemVkKCk7CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAg
IHNldFBsYXRmb3JtTGF5ZXIobWFrZVVuaXF1ZTxXQ1BsYXRmb3JtTGF5ZXJHQ0dMPihtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcikpOworI2VuZGlmCiB9CiAKIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6On5SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5jMzcxZGQ5ODg4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5LmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2lmIFVT
RShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXQ1Vw
YXRlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6UmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkoV2ViUGFnZSYgcGFnZSwgQ2xpZW50JiBjbGllbnQpCisg
ICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworUmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk6On5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSgpCit7Cisg
ICAgZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCgpOworfQorCitJUEM6OkNvbm5lY3Rpb24q
IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuICZjb25zdF9jYXN0PFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
Jj4oKnRoaXMpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQor
CitHUFVQcm9jZXNzQ29ubmVjdGlvbiYgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rp
b24pIHsKKyAgICAgICAgYXV0byYgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgICAgICBncHVQcm9j
ZXNzQ29ubmVjdGlvbi5hZGRDbGllbnQoKnRoaXMpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVj
dGlvbi5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHdjTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgICAgIGdwdVByb2Nl
c3NDb25uZWN0aW9uLmNvbm5lY3Rpb24oKS5zZW5kKAorICAgICAgICAgICAgTWVzc2FnZXM6OkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVdDTGF5ZXJUcmVlSG9zdCh3Y0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyKCksIG1fcGFnZS5uYXRpdmVXaW5kb3dIYW5kbGUoKSksCisgICAgICAg
ICAgICAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0Zv
clN5bmNSZXBseSk7CisgICAgICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBncHVQcm9jZXNz
Q29ubmVjdGlvbjsKKyAgICB9CisgICAgcmV0dXJuICptX2dwdVByb2Nlc3NDb25uZWN0aW9uOwor
fQorCit2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNjb25uZWN0R3B1UHJvY2Vz
c0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoYXV0byBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IHN0ZDo6
ZXhjaGFuZ2UobV9ncHVQcm9jZXNzQ29ubmVjdGlvbiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24tPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgICAgIGdwdVByb2Nl
c3NDb25uZWN0aW9uLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKKyAgICAgICAgZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlV0NMYXllclRyZWVIb3N0KHdjTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIoKSksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24mIHByZXZpb3VzQ29ubmVjdGlvbikKK3sKKyAgICBwcmV2aW91c0Nvbm5lY3Rpb24ucmVtb3Zl
Q2xpZW50KCp0aGlzKTsKKyAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5tZXNzYWdlUmVjZWl2
ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHdjTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXIoKS50b1VJbnQ2NCgpKTsKKyAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uID0gbnVsbHB0cjsK
K30KKwordWludDY0X3QgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2NMYXllclRyZWVIb3N0SWRlbnRp
ZmllcigpLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6
OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZUluZm8pCit7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlV0NMYXllclRyZWVIb3N0OjpVcGRhdGUodXBkYXRlSW5mbykpOworfQorCit2b2lkIFJl
bW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRVcGRhdGUoKQoreworICAgIG1fY2xpZW50LmRp
ZFVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShH
UkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc3OGQ4Y2IwYTI3YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisj
aW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiV0NMYXllclRyZWVI
b3N0SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdDVXBhdGVJ
bmZvOworCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eQorICAgIDogcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAg
ICAsIHByaXZhdGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHkpOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCkgPSAwOworICAgIH07CisKKyAgICBSZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlJiwgQ2xpZW50Jik7CisgICAgflJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5KCk7CisKKyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmKTsK
KworICAgIHZvaWQgZGlkVXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgV0NMYXllclRyZWVIb3N0
SWRlbnRpZmllciB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93
Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyOyB9OworICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uJiBl
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIHZvaWQgZGlzY29ubmVjdEdwdVByb2Nl
c3NJZk5lZWRlZCgpOworCisgICAgLy8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAorICAg
IHZvaWQgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYp
IGZpbmFsOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXZWFrUHRyPEdQVVByb2Nl
c3NDb25uZWN0aW9uPiBtX2dwdVByb2Nlc3NDb25uZWN0aW9uOworICAgIFdDTGF5ZXJUcmVlSG9z
dElkZW50aWZpZXIgbV93Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIHsgV0NMYXllclRyZWVIb3N0
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBDbGll
bnQmIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjRmOGFmNzdhMzExNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworbWVzc2FnZXMgLT4g
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgRGlkVXBkYXRl
KCkKK30KKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRl
bnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4wZGJhMDVlMTU1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworZW51bSBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyVHlwZSB7IH07
Cit1c2luZyBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxXQ0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE4N2UwOGU4MmUxOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1dDUGxhdGZvcm1MYXllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV0NQbGF0Zm9ybUxheWVyR0NHTCA6IHB1YmxpYyBXZWJDb3JlOjpXQ1Bs
YXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIFdDUGxhdGZvcm1MYXllckdDR0woR3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAgIDogbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICB7CisgICAgfQorICAgIEdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciYgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCkgeyByZXR1cm4g
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRleCBhNTM0NDA3ZDAzNjYuLmQxZDJkYjhjMGYxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNw
cApAQCAtNDAsNiArNDAsOSBAQAogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBV
U0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBo
aWNzLmgiCiAjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiRHJh
d2luZ0FyZWFXQy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC01Nyw2ICs2MCwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0Fy
ZWE+IERyYXdpbmdBcmVhOjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZQog
I2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCiAg
ICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6OkNvb3JkaW5hdGVkR3JhcGhpY3M6CiAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcz4od2ViUGFnZSwg
cGFyYW1ldGVycyk7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgY2Fz
ZSBEcmF3aW5nQXJlYVR5cGU6OldDOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5n
QXJlYVdDPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTA4LDYg
KzExNSwxMCBAQCBib29sIERyYXdpbmdBcmVhOjpzdXBwb3J0c0dQVVByb2Nlc3NSZW5kZXJpbmco
RHJhd2luZ0FyZWFUeXBlIHR5cGUpCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8
IFVTRShURVhUVVJFX01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0
ZWRHcmFwaGljczoKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA1
ZTBiOTc1OWM2Y2MuLjI5ZDk5YWFmOTUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC0xMzYsNiArMTM2LDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmll
d1NpemUsIGJvb2wgZmx1c2hTeW5jaHJvbm91c2x5LCBjb25zdCBXVEY6Ok1hY2hTZW5kUmlnaHQm
IGZlbmNlUG9ydCkgeyB9CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkodWludDY0X3QsIFdlYkNvcmU6OkludFNpemUp
IHsgfTsKKyNlbmRpZgorCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JB
UEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCiAgICAgdmlydHVhbCB2b2lkIGxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKCkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggOWQ1ZjZkY2E2
ZTM4Li5iMTk2YTlmMDVkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCkBAIC00MCw2ICs0MCwxMCBAQCBt
ZXNzYWdlcyAtPiBEcmF3aW5nQXJlYSBOb3RSZWZDb3VudGVkIHsKICAgICBBZGRUcmFuc2FjdGlv
bkNhbGxiYWNrSUQoV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAjZW5kaWYKIAorI2lm
IFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBVcGRhdGVHZW9tZXRyeSh1aW50NjRfdCBiYWNr
aW5nU3RvcmVTdGF0ZUlELCBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKQorI2VuZGlmCisKICNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIEFkanVzdFRyYW5zaWVudFpv
b20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbikKICAgICBDb21taXRU
cmFuc2llbnRab29tKGRvdWJsZSBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJl
YVdDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVh
V0MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjYyZjc0NzY3
NWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvRHJhd2luZ0FyZWFXQy5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhV0MuaCIKKworI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJX
Qy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisj
aW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworRHJh
d2luZ0FyZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogRHJhd2luZ0FyZWEoRHJhd2lu
Z0FyZWFUeXBlOjpXQywgcGFyYW1ldGVycy5kcmF3aW5nQXJlYUlkZW50aWZpZXIsIHdlYlBhZ2Up
CisgICAgLCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQorICAgICwgbV9yZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQ
YWdlLCAqdGhpcykpCisgICAgLCBtX2xheWVyRmFjdG9yeSgqdGhpcykKKyAgICAsIG1fcm9vdExh
eWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzLT5t
X3Jvb3RMYXllckNsaWVudCkpCisgICAgLCBtX3VwZGF0ZVJlbmRlcmluZ1RpbWVyKCp0aGlzLCAm
RHJhd2luZ0FyZWFXQzo6dXBkYXRlUmVuZGVyaW5nKQorICAgICwgbV9jb21taXRRdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgiRHJhd2luZ0FyZWFXQyBDb21taXRRdWV1ZSJfcykpCit7CisgICAgbV9y
b290TGF5ZXItPnNldE5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRyYXdpbmcgYXJlYSBy
b290IikpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9y
b290TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKK30KKworRHJhd2luZ0FyZWFXQzo6fkRyYXdpbmdBcmVhV0MoKQoreworICAgIHdoaWxlIChh
dXRvIGxheWVyID0gbV9saXZlR3JhcGhpY3NMYXllcnMucmVtb3ZlSGVhZCgpKQorICAgICAgICBs
YXllci0+Y2xlYXJPYnNlcnZlcigpOworfQorCitHcmFwaGljc0xheWVyRmFjdG9yeSogRHJhd2lu
Z0FyZWFXQzo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiAmbV9sYXllckZh
Y3Rvcnk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9vdExheWVycygpCit7Cisg
ICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47CisgICAgaWYgKG1fY29udGVu
dExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqbV9jb250ZW50TGF5ZXIpOworICAg
ICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFw
cGVuZCgqbV92aWV3T3ZlcmxheVJvb3RMYXllcik7CisgICAgfQorICAgIG1fcm9vdExheWVyLT5z
ZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0
ZSgpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXll
cjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6YXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSBsYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7
Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29s
IGlzRnJvemVuKQoreworICAgIGlmIChtX2lzUmVuZGVyaW5nU3VzcGVuZGVkID09IGlzRnJvemVu
KQorICAgICAgICByZXR1cm47CisgICAgbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9IGlzRnJvemVu
OworICAgIGlmICghbV9pc1JlbmRlcmluZ1N1c3BlbmRlZCAmJiBtX2hhc0RlZmVycmVkUmVuZGVy
aW5nVXBkYXRlKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30KKwordm9pZCBE
cmF3aW5nQXJlYVdDOjp1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlE
LCBJbnRTaXplIHZpZXdTaXplKQoreworICAgIG1fYmFja2luZ1N0b3JlU3RhdGVJRCA9IGJhY2tp
bmdTdG9yZVN0YXRlSUQ7CisgICAgbV93ZWJQYWdlLnNldFNpemUodmlld1NpemUpOworICAgIG1f
cm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS5zaXplKCkpOworfQorCit2b2lkIERyYXdpbmdB
cmVhV0M6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlZ2lvbiA9IHsgfTsKKyAg
ICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07CisgICAgc2V0
TmVlZHNEaXNwbGF5SW5SZWN0KG1fd2ViUGFnZS5ib3VuZHMoKSk7Cit9CisKK3ZvaWQgRHJhd2lu
Z0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2RpcnR5UmVnaW9uLnVu
aXRlKHJlY3QpOworICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVdDOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAg
IG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Nyb2xsUmVjdCk7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmIChzY3JvbGxSZWN0ICE9IG1fc2Nyb2xsUmVjdCkgeworICAgICAgICAg
ICAgLy8gSnVzdCByZXBhaW50IHRoZSBlbnRpcmUgY3VycmVudCBzY3JvbGwgcmVjdCwgd2UnbGwg
c2Nyb2xsIHRoZSBuZXcgcmVjdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KG1fc2Nyb2xsUmVjdCk7CisgICAgICAgICAgICBtX3Njcm9sbFJlY3QgPSB7IH07Cisg
ICAgICAgICAgICBtX3Njcm9sbE9mZnNldCA9IHsgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBH
ZXQgdGhlIHBhcnQgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGluIHRoZSBzY3JvbGwgcmVj
dC4KKyAgICAgICAgUmVnaW9uIGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHNj
cm9sbFJlY3QsIG1fZGlydHlSZWdpb24pOworICAgICAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3Jv
bGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHBhcnRzIG9mIHRo
ZSBkaXJ0eSByZWdpb24gdGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gc3VidHJhY3QgdGhlbSBmcm9tIHRoZSByZWdpb24sIG1vdmUgdGhl
bSBhbmQgcmUtYWRkIHRoZW0uCisgICAgICAgICAgICBtX2RpcnR5UmVnaW9uLnN1YnRyYWN0KHNj
cm9sbFJlY3QpOworICAgICAgICAgICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMuCisgICAgICAg
ICAgICBSZWdpb24gbW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdCh0cmFu
c2xhdGUoZGlydHlSZWdpb25JblNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSwgc2Nyb2xsUmVjdCk7
CisgICAgICAgICAgICAvLyBBbmQgYWRkIHRoZW0gYmFjay4KKyAgICAgICAgICAgIG1fZGlydHlS
ZWdpb24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgorICAgICAgICBSZWdp
b24gc2Nyb2xsUmVwYWludFJlZ2lvbiA9IHN1YnRyYWN0KHNjcm9sbFJlY3QsIHRyYW5zbGF0ZShz
Y3JvbGxSZWN0LCBzY3JvbGxEZWx0YSkpOworICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNj
cm9sbFJlcGFpbnRSZWdpb24pOworICAgICAgICBtX3Njcm9sbFJlY3QgPSBzY3JvbGxSZWN0Owor
ICAgICAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgdHJpZ2dlclJl
bmRlcmluZ1VwZGF0ZSgpOworICAgIH0KK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjp0cmlnZ2Vy
UmVuZGVyaW5nVXBkYXRlKCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCB8fCBt
X3dhaXREaWRVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9
IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fdXBkYXRlUmVuZGVyaW5n
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdXBkYXRlUmVuZGVyaW5n
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoTGF5ZXJJbWFn
ZUJ1ZmZlcnMoV0NVcGF0ZUluZm8mIGluZm8pCit7CisgICAgZm9yIChhdXRvJiBsYXllckluZm8g
OiBpbmZvLmNoYW5nZWRMYXllcnMpIHsKKyAgICAgICAgaWYgKGxheWVySW5mby5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFn
ZSA9IGxheWVySW5mby5iYWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGZsdXNoZXIgPSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQorICAgICAgICAg
ICAgICAgICAgICBmbHVzaGVyLT5mbHVzaCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCitib29sIERyYXdpbmdBcmVhV0M6OmlzQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZW50TGF5ZXI7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRl
UmVuZGVyaW5nKCkKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCkgeworICAgICAg
ICBtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlZW50cmFudCwgZS5nLiBhIHJB
RiBjYWxsYmFjayBtYXkgZm9yY2UgcmVwYWludC4KKyAgICBpZiAobV9pblVwZGF0ZVJlbmRlcmlu
ZykKKyAgICAgICAgcmV0dXJuOworICAgIFNldEZvclNjb3BlPGJvb2w+IGNoYW5nZShtX2luVXBk
YXRlUmVuZGVyaW5nLCB0cnVlKTsKKworICAgIEFTU0VSVCghbV93YWl0RGlkVXBkYXRlKTsKKyAg
ICBtX3dhaXREaWRVcGRhdGUgPSB0cnVlOworCisgICAgbV93ZWJQYWdlLnVwZGF0ZVJlbmRlcmlu
ZygpOworICAgIG1fd2ViUGFnZS5mbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOworCisg
ICAgT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdzOworICAgIG1f
d2ViUGFnZS5maW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShmbGFncyk7CisgICAgbV93ZWJQYWdlLmRp
ZFVwZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCisgICAg
ICAgIHNlbmRVcGRhdGVBQygpOworICAgIGVsc2UKKyAgICAgICAgc2VuZFVwZGF0ZU5vbkFDKCk7
Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZUFDKCkKK3sKKyAgICBtX3Jvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgLy8g
QmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFj
aGVkIHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1
c2ggaXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAg
IG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh7IH0pOworCisg
ICAgbV91cGRhdGVJbmZvLnJvb3RMYXllciA9IG1fcm9vdExheWVyLT5wcmltYXJ5TGF5ZXJJRCgp
OworCisgICAgbV9jb21taXRRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0
cigqdGhpcyksIHVwZGF0ZUluZm8gPSBzdGQ6OmV4Y2hhbmdlKG1fdXBkYXRlSW5mbywgeyB9KV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgZmx1c2hMYXllckltYWdlQnVmZmVycyh1cGRhdGVJbmZvKTsK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpLCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1cGRhdGVJbmZvKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlKFdURk1vdmUo
dXBkYXRlSW5mbykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworc3RhdGljIGJvb2wgc2hv
dWxkUGFpbnRCb3VuZHNSZWN0KGNvbnN0IEludFJlY3QmIGJvdW5kcywgY29uc3QgVmVjdG9yPElu
dFJlY3QsIDE+JiByZWN0cykKK3sKKyAgICBjb25zdCBzaXplX3QgcmVjdFRocmVzaG9sZCA9IDEw
OworICAgIGNvbnN0IGRvdWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzU7CisKKyAgICBp
ZiAocmVjdHMuc2l6ZSgpIDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4gcmVjdFRocmVzaG9sZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQXR0ZW1wdCB0byBndWVzcyB3aGV0aGVyIG9yIG5v
dCB3ZSBzaG91bGQgdXNlIHRoZSByZWdpb24gYm91bmRzIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwg
cmVjdHMuCisgICAgLy8gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2Yg
Indhc3RlZCBzcGFjZSIgaW4gdGhlIGJvdW5kcy4gSWYgdGhhdCB3YXN0ZWQgc3BhY2UKKyAgICAv
LyBpcyB0b28gbGFyZ2UsIHRoZW4gd2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJlY3QgcGFpbnRpbmcg
aW5zdGVhZC4KKyAgICB1bnNpZ25lZCBib3VuZHNBcmVhID0gYm91bmRzLndpZHRoKCkgKiBib3Vu
ZHMuaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcmVjdHNBcmVhID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQorICAgICAgICByZWN0c0FyZWEgKz0gcmVj
dHNbaV0ud2lkdGgoKSAqIHJlY3RzW2ldLmhlaWdodCgpOworCisgICAgZG91YmxlIHdhc3RlZFNw
YWNlID0gMSAtIChzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3RzQXJlYSkgLyBib3VuZHNBcmVhKTsK
KyAgICByZXR1cm4gd2FzdGVkU3BhY2UgPD0gd2FzdGVkU3BhY2VUaHJlc2hvbGQ7Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZU5vbkFDKCkKK3sKKyAgICBpZiAobV9kaXJ0eVJl
Z2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGlkVXBkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgSW50UmVjdCBib3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOworICAg
IEFTU0VSVChtX3dlYlBhZ2UuYm91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7CisgICAgSW50U2l6
ZSBiaXRtYXBTaXplID0gYm91bmRzLnNpemUoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGJpdG1h
cFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgYXV0byBpbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyKGJpdG1hcFNpemUpOworICAgIGF1dG8gcmVjdHMgPSBtX2RpcnR5UmVnaW9u
LnJlY3RzKCk7CisgICAgaWYgKHNob3VsZFBhaW50Qm91bmRzUmVjdChib3VuZHMsIHJlY3RzKSkg
eworICAgICAgICByZWN0cy5jbGVhcigpOworICAgICAgICByZWN0cy5hcHBlbmQoYm91bmRzKTsK
KyAgICB9CisgICAgbV9kaXJ0eVJlZ2lvbiA9IHsgfTsKKworICAgIFVwZGF0ZUluZm8gdXBkYXRl
SW5mbzsKKyAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKKyAgICB1
cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gYm91bmRz
OworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMgPSByZWN0czsKKyAgICB1cGRhdGVJbmZvLnNj
cm9sbFJlY3QgPSBtX3Njcm9sbFJlY3Q7CisgICAgdXBkYXRlSW5mby5zY3JvbGxPZmZzZXQgPSBt
X3Njcm9sbE9mZnNldDsKKyAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgbV9zY3JvbGxPZmZz
ZXQgPSB7IH07CisKKyAgICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgp
OworICAgIGdyYXBoaWNzQ29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCgpLCAtYm91
bmRzLnkoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCisgICAgICAgIG1f
d2ViUGFnZS5kcmF3UmVjdChpbWFnZS0+Y29udGV4dCgpLCByZWN0KTsKKyAgICBpbWFnZS0+Zmx1
c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRjaChb
dGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc3RhdGVJRCA9IG1fYmFja2luZ1N0b3Jl
U3RhdGVJRCwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFi
bGUgeworICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNoZXIoKSkK
KyAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RhdGVJRCwgdXBk
YXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBpZiAoc3RhdGVJRCAhPSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpIHsKKyAgICAgICAgICAgICAg
ICBkaWRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqaW1hZ2UtPmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpLmNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgdXBkYXRlSW5mby5i
aXRtYXBIYW5kbGUgPSBzdGQ6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRsZT4oV1RGTW92ZSho
YW5kbGUpKTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlVw
ZGF0ZShzdGF0ZUlELCBXVEZNb3ZlKHVwZGF0ZUluZm8pKSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xh
eWVyV0MmIGxheWVyKQoreworICAgIG1fbGl2ZUdyYXBoaWNzTGF5ZXJzLmFwcGVuZCgmbGF5ZXIp
OworICAgIG1fdXBkYXRlSW5mby5hZGRlZExheWVycy5hcHBlbmQobGF5ZXIucHJpbWFyeUxheWVy
SUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3JhcGhpY3NMYXllclJlbW92ZWQoR3Jh
cGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICBtX2xpdmVHcmFwaGljc0xheWVycy5yZW1vdmUo
JmxheWVyKTsKKyAgICBtX3VwZGF0ZUluZm8ucmVtb3ZlZExheWVycy5hcHBlbmQobGF5ZXIucHJp
bWFyeUxheWVySUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0
ZUluZm8oV0NMYXllclVwYXRlSW5mbyYmIGluZm8pCit7CisgICAgbV91cGRhdGVJbmZvLmNoYW5n
ZWRMYXllcnMuYXBwZW5kKFdURk1vdmUoaW5mbykpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXI+
IERyYXdpbmdBcmVhV0M6OmNyZWF0ZUltYWdlQnVmZmVyKEZsb2F0U2l6ZSBzaXplKQoreworICAg
IGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRVc2VSZW1vdGVSZW5kZXJpbmdGb3Io
UmVuZGVyaW5nUHVycG9zZTo6RE9NKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS5lbnN1cmVS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICByZXR1cm4gQ29uY3JldGVJbWFnZUJ1ZmZlcjxV
bmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjo6Y3JlYXRlKHNpemUsIDEs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgsIG51bGxw
dHIpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSgpCit7CisgICAgbV93YWl0
RGlkVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUp
IHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNlOworICAgICAg
ICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgfQorfQorCitEcmF3aW5nQXJlYVdDOjpS
b290TGF5ZXJDbGllbnQ6OlJvb3RMYXllckNsaWVudChXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDog
bV93ZWJQYWdlKHdlYlBhZ2UpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Um9vdExheWVy
Q2xpZW50OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdyYXBoaWNzTGF5ZXJQ
YWludEJlaGF2aW9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuY2xpcChy
ZWN0VG9QYWludCk7CisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXco
KS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWludCkpOworICAgIGNv
bnRleHQucmVzdG9yZSgpOworfQorCitmbG9hdCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGll
bnQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLmNv
cmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2lu
Z0FyZWFXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0Fy
ZWFXQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODcyMTcyZGYy
YjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvRHJhd2luZ0FyZWFXQy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0xheWVyV0MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgorI2lu
Y2x1ZGUgIldDTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
RmFjdG9yeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIERyYXdpbmdBcmVhV0MgZmluYWwKKyAgICA6IHB1YmxpYyBEcmF3aW5nQXJl
YQorICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXIKKyAgICAsIHB1YmxpYyBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5n
QXJlYVdDKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAg
fkRyYXdpbmdBcmVhV0MoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICAvLyBEcmF3aW5nQXJl
YQorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9y
eSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJy
aWRlOworICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKSBvdmVycmlkZTsKKyAgICB2b2lk
IGZvcmNlUmVwYWludEFzeW5jKFdlYlBhZ2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyYmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TGF5ZXJUcmVlU3RhdGVJc0Zy
b3plbihib29sKSBvdmVycmlkZTsKKyAgICBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkOyB9CisgICAgdm9p
ZCB1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
b3ZlcnJpZGU7CisgICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIC8vIEdyYXBoaWNzTGF5ZXJXQzo6T2Jz
ZXJ2ZXIKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xheWVyV0MmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92
ZXJyaWRlOworICAgIHZvaWQgY29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVwYXRlSW5mbyYm
KSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdl
QnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkgb3ZlcnJpZGU7CisgICAgLy8gUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHk6OkNsaWVudAorICAgIHZvaWQgZGlkVXBkYXRlKCkgb3ZlcnJpZGU7CisK
KyAgICBib29sIGlzQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgdm9pZCB1cGRhdGVSZW5kZXJpbmco
KTsKKyAgICB2b2lkIHNlbmRVcGRhdGVBQygpOworICAgIHZvaWQgc2VuZFVwZGF0ZU5vbkFDKCk7
CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CisKKyAgICBjbGFzcyBSb290TGF5ZXJDbGll
bnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYpOworICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0VG9QYWlu
dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlOworICAgICAg
ICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBXZWJQ
YWdlJiBtX3dlYlBhZ2U7CisgICAgfTsKKworICAgIFJvb3RMYXllckNsaWVudCBtX3Jvb3RMYXll
ckNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk+
IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk7CisgICAgV0NMYXllckZhY3RvcnkgbV9sYXll
ckZhY3Rvcnk7CisgICAgRG91Ymx5TGlua2VkTGlzdDxHcmFwaGljc0xheWVyV0M+IG1fbGl2ZUdy
YXBoaWNzTGF5ZXJzOworICAgIFdlYkNvcmU6OlRpbWVyIG1fdXBkYXRlUmVuZGVyaW5nVGltZXI7
CisgICAgYm9vbCBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pblVwZGF0
ZVJlbmRlcmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dhaXREaWRVcGRhdGUgeyBmYWxzZSB9
OworICAgIFdDVXBhdGVJbmZvIG1fdXBkYXRlSW5mbzsKKyAgICBSZWY8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IG1fY29udGVudExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyOworICAgIFJlZjxXb3JrUXVldWU+IG1fY29tbWl0UXVldWU7Cisg
ICAgaW50NjRfdCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisgICAgV2ViQ29yZTo6UmVn
aW9uIG1fZGlydHlSZWdpb247CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Njcm9sbFJlY3Q7Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
R3JhcGhpY3NMYXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L0dyYXBoaWNzTGF5ZXJXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi40NDE3MjRkYzc5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0wLDAgKzEsNDY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKworI2luY2x1ZGUgIldD
UGxhdGZvcm1MYXllckdDR0wuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworR3JhcGhpY3NMYXllcldDOjpHcmFwaGljc0xheWVyV0MoVHlwZSBsYXll
clR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwgT2JzZXJ2ZXImIG9ic2VydmVyKQor
ICAgIDogR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKKyAgICAsIG1fb2JzZXJ2ZXIo
Jm9ic2VydmVyKQoreworICAgIG1fb2JzZXJ2ZXItPmdyYXBoaWNzTGF5ZXJBZGRlZCgqdGhpcyk7
Cit9CisKK0dyYXBoaWNzTGF5ZXJXQzo6fkdyYXBoaWNzTGF5ZXJXQygpCit7CisgICAgd2lsbEJl
RGVzdHJveWVkKCk7CisgICAgaWYgKG1fb2JzZXJ2ZXIpCisgICAgICAgIG1fb2JzZXJ2ZXItPmdy
YXBoaWNzTGF5ZXJSZW1vdmVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIEdyYXBoaWNzTGF5ZXJXQzo6Z2VuZXJhdGVMYXllcklEKCkKK3sKKyAgICAvLyAwIGFu
ZCBtYXggY2FuJ3QgYmUgdXNlZCBmb3IgaGFzaCBrZXlzCisgICAgc3RhdGljIEdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCA9IDE7CisgICAgcmV0dXJuIGlkKys7Cit9CisKK0dyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBHcmFwaGljc0xheWVyV0M6OnByaW1hcnlMYXllcklE
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllcklEOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6
OkJhY2tpbmdTdG9yZSk7CisgICAgYWRkUmVwYWludFJlY3QoeyB7IH0sIG1fc2l6ZSB9KTsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHJlY3QsIFNob3VsZENsaXBUb0xheWVyKQoreworICAgIGlmICghZHJh
d3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50UmVjdChyZWN0
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkK
K3sKKyAgICAvLyBGb3IgZXhhbXBsZSwgaWYgV2ViR0wgY2FudmFzIGNoYW5nZWQsIGl0IG5lZWRz
IGZsdXNoIHRvIGRpc3BsYXkuCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKHsgfSk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNz
TGF5ZXI+PiYmIGNoaWxkcmVuKQoreworICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gR3JhcGhp
Y3NMYXllcjo6c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgIGlmIChjaGlsZHJl
bkNoYW5nZWQpCisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpDaGlsZHJlbik7CisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OmFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIpCit7
CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZExheWVyKSk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4m
JiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRB
dEluZGV4KFdURk1vdmUoY2hpbGRMYXllciksIGluZGV4KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6YWRkQ2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGlsZExheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3co
V1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6
OmFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXllciwgR3JhcGhpY3NM
YXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKFdURk1v
dmUoY2hpbGRMYXllciksIHNpYmxpbmcpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpyZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGljc0xheWVyPiYmIG5l
d0NoaWxkKQoreworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQs
IFdURk1vdmUobmV3Q2hpbGQpKSkgeworICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6cmVtb3ZlRnJvbVBh
cmVudCgpCit7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGlj
c0xheWVyV0MqPihtX3BhcmVudCktPm5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hh
bmdlOjpDaGlsZHJlbik7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xh
eWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX21hc2tMYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihXVEZNb3ZlKGxheWVyKSk7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYXRlZExheWVyKQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZExheWVyKGxheWVy
KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwbGljYUxh
eWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0ZWRCeUxheWVyKFJl
ZlB0cjxHcmFwaGljc0xheWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX3JlcGxp
Y2FMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0
ZWRCeUxheWVyKFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
V0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6
OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9
PSBtX3Bvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9z
aXRpb24ocG9pbnQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRBbmNob3JQb2ludChj
b25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBv
aW50KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQo
cG9pbnQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9t
ZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luKQoreworICAgIGlmIChv
cmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRCb3VuZHNPcmlnaW4ob3JpZ2luKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0
ID09IHRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
VHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpUcmFuc2Zvcm0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q2hpbGRyZW5UcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gY2hp
bGRyZW5UcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENoaWxkcmVuVHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2
ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVz
M0QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpQ
cmVzZXJ2ZXMzRCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRNYXNrc1RvQm91bmRz
KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tzVG9Cb3VuZHMoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHModmFsdWUpOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRz
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSBjb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzUmVjdCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5
ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRD
b250ZW50c0NsaXBwaW5nUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gY29udGVudHNDbGlwcGluZ1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KHZhbHVlKTsKKyAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1Jl
Y3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZhbHVlKTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVmlzaWJsZShib29sIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBjb250ZW50c0FyZVZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSh2YWx1ZSk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJsZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChjb2xvciA9PSBtX3NvbGlkQ29sb3IpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3NvbGlkQ29sb3IgPSBjb2xvcjsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6U29saWRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllcldDOjpzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyLCBDb250ZW50c0xheWVyUHVycG9zZSkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUxh
eWVyID09IHBsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BsYXRmb3JtTGF5
ZXIgPSBwbGF0Zm9ybUxheWVyOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpQbGF0Zm9ybUxheWVyKTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnVzZXND
b250ZW50c0xheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykKK3sK
KyAgICBpZiAoaXNTaG93aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cpOworICAgIHVwZGF0
ZURlYnVnSW5kaWNhdG9ycygpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RGVi
dWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKK3sKKyAgICBtX2RlYnVn
Qm9yZGVyQ29sb3IgPSBjb2xvcjsKKyAgICBtX2RlYnVnQm9yZGVyV2lkdGggPSB3aWR0aDsKKyAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNo
b3cpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgPT0gc2hvdykKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihzaG93
KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwYWludENv
dW50KTsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmICghZmlsdGVycy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbHRlck9wZXJhdGlvbiA6
IGZpbHRlcnMub3BlcmF0aW9ucygpKSB7CisgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPnR5
cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldD
OjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgYm9v
bCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsK
KyAgICBpZiAoR3JhcGhpY3NMYXllcjo6ZmlsdGVycygpID09IGZpbHRlcnMpCisgICAgICAgIHJl
dHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworCisgICAgaWYgKGNhbkNvbXBvc2l0ZUZpbHRlcnMp
IHsKKyAgICAgICAgaWYgKCFHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoR3JhcGhpY3NMYXllcjo6Zmls
dGVycygpLnNpemUoKSkKKyAgICAgICAgY2xlYXJGaWx0ZXJzKCk7CisKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RmlsdGVycyk7CisgICAgcmV0dXJuIGNhbkNv
bXBvc2l0ZUZpbHRlcnM7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZp
bHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBib29sIGNhbkNv
bXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworICAgIGlm
IChtX2JhY2tkcm9wRmlsdGVycyA9PSBmaWx0ZXJzKQorICAgICAgICByZXR1cm4gY2FuQ29tcG9z
aXRlRmlsdGVyczsKKyAgICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykKKyAgICAgICAgR3JhcGhp
Y3NMYXllcjo6c2V0QmFja2Ryb3BGaWx0ZXJzKGZpbHRlcnMpOworICAgIGVsc2UKKyAgICAgICAg
Y2xlYXJCYWNrZHJvcEZpbHRlcnMoKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NM
YXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKTsKKyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmls
dGVyczsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVyc1JlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYmFja2Ryb3BGaWx0ZXJzUmVjdCkKK3sKKyAgICBpZiAo
bV9iYWNrZHJvcEZpbHRlcnNSZWN0ID09IGJhY2tkcm9wRmlsdGVyc1JlY3QpCisgICAgICAgIHJl
dHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGJhY2tkcm9w
RmlsdGVyc1JlY3QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNrZHJvcEZpbHRlcnMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6bm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFncykKK3sKKyAgICBp
ZiAoYmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgbmVlZHNGbHVz
aCA9ICFtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcy5hZGQo
ZmxhZ3MpOworICAgIGlmIChuZWVkc0ZsdXNoKQorICAgICAgICBjbGllbnQoKS5ub3RpZnlGbHVz
aFJlcXVpcmVkKHRoaXMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byogbWFzayA9
IG1hc2tMYXllcigpKQorICAgICAgICBtYXNrLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgaWYgKGF1dG8qIHJlcGxpY2EgPSByZXBsaWNhTGF5ZXIoKSkKKyAg
ICAgICAgcmVwbGljYS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
ICAgIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBmb3IgKGF1
dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgY2hpbGQtPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZShyZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKQoreworICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMp
CisgICAgICAgIHJldHVybjsKKyAgICBXQ0xheWVyVXBhdGVJbmZvIHVwZGF0ZTsKKyAgICB1cGRh
dGUuaWQgPSBwcmltYXJ5TGF5ZXJJRCgpOworICAgIHVwZGF0ZS5jaGFuZ2VzID0gc3RkOjpleGNo
YW5nZShtX3VuY29tbWl0dGVkQ2hhbmdlcywgeyB9KTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICB1cGRhdGUuY2hpbGRyZW4gPSBX
VEY6Om1hcChjaGlsZHJlbigpLCBbXShhdXRvJiBsYXllcikgeworICAgICAgICAgICAgcmV0dXJu
IGxheWVyLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYgKHVw
ZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza0xheWVyKSB7CisgICAgICAgIGlmICht
YXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZS5tYXNrTGF5ZXIgPSBtYXNrTGF5ZXIoKS0+
cHJpbWFyeUxheWVySUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLm1hc2tM
YXllciA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UmVwbGljYUxheWVyKSB7CisgICAgICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkK
KyAgICAgICAgICAgIHVwZGF0ZS5yZXBsaWNhTGF5ZXIgPSByZXBsaWNhTGF5ZXIoKS0+cHJpbWFy
eUxheWVySUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXll
ciA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgdXBkYXRlLnBvc2l0aW9uID0gcG9zaXRpb24o
KTsKKyAgICAgICAgdXBkYXRlLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICAgICAg
dXBkYXRlLnNpemUgPSBzaXplKCk7CisgICAgICAgIHVwZGF0ZS5ib3VuZHNPcmlnaW4gPSBib3Vu
ZHNPcmlnaW4oKTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6UHJlc2VydmVzM0QpCisgICAgICAgIHVwZGF0ZS5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNE
KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0
KQorICAgICAgICB1cGRhdGUuY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgaWYg
KHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpCisg
ICAgICAgIHVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCA9IGNvbnRlbnRzQ2xpcHBpbmdSZWN0
KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNp
YmxlKQorICAgICAgICB1cGRhdGUuY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxl
KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNp
YmlsaXR5KQorICAgICAgICB1cGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gYmFja2ZhY2VWaXNp
YmlsaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NU
b0JvdW5kcykKKyAgICAgICAgdXBkYXRlLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7
CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7
CisgICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZpc2libGUoKSAmJiAh
c2l6ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBpbWFnZSA9IG1fb2JzZXJ2ZXIt
PmNyZWF0ZUltYWdlQnVmZmVyKHNpemUoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgY2xpcFJl
Y3QgPSB7IHsgfSwgc2l6ZSgpIH07CisgICAgICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhpbWFnZS0+Y29udGV4dCgpLCBjbGlwUmVjdCk7CisgICAgICAgICAgICBpbWFnZS0+Zmx1
c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisgICAgICAgICAgICB1cGRhdGUuYmFja2luZ1N0b3Jl
LnNldEltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKworICAgICAgICAgICAgaW5jcmVtZW50
UmVwYWludENvdW50KCk7CisgICAgICAgICAgICB1cGRhdGUuY2hhbmdlcy5hZGQoV0NMYXllckNo
YW5nZTo6UmVwYWludENvdW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodXBkYXRlLmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICB1cGRhdGUuc29saWRD
b2xvciA9IG1fc29saWRDb2xvcjsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpEZWJ1Z1Zpc3VhbHMpIHsKKyAgICAgICAgdXBkYXRlLnNob3dEZWJ1Z0JvcmRlciA9IGlz
U2hvd2luZ0RlYnVnQm9yZGVyKCk7CisgICAgICAgIHVwZGF0ZS5kZWJ1Z0JvcmRlckNvbG9yID0g
bV9kZWJ1Z0JvcmRlckNvbG9yOworICAgICAgICB1cGRhdGUuZGVidWdCb3JkZXJXaWR0aCA9IG1f
ZGVidWdCb3JkZXJXaWR0aDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6UmVwYWludENvdW50KSB7CisgICAgICAgIHVwZGF0ZS5zaG93UmVwYWludENvdW50
ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOworICAgICAgICB1cGRhdGUucmVwYWludENv
dW50ID0gcmVwYWludENvdW50KCk7CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAgICAgIHVwZGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgp
OworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAg
ICAgICAgdXBkYXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUu
Y2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgIHVwZGF0ZS5maWx0ZXJz
ID0gZmlsdGVycygpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tkcm9wRmlsdGVycykgeworICAgICAgICB1cGRhdGUuYmFja2Ryb3BGaWx0ZXJzID0gYmFja2Ry
b3BGaWx0ZXJzKCk7CisgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0ID0gYmFja2Ry
b3BGaWx0ZXJzUmVjdCgpOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpQbGF0Zm9ybUxheWVyKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCisg
ICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gc3RhdGljX2Nh
c3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPmdyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcigpLnRvVUludDY0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVw
ZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSAwOworICAgIH0KKyAgICBtX29ic2Vy
dmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5hYjVlYzQ3MDkxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApAQCAtMCwwICsxLDEwNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxp
bmtlZExpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJX
QyBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyLCBwdWJsaWMgRG91Ymx5TGlu
a2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPiB7CitwdWJsaWM6CisgICAgc3RydWN0IE9ic2Vy
dmVyIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xh
eWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBncmFwaGljc0xheWVyUmVtb3ZlZChH
cmFwaGljc0xheWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRMYXllclVw
YXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6
ZSkgPSAwOworICAgIH07CisKKyAgICBHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5cGUsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmLCBPYnNlcnZlciYpOworICAgIH5HcmFwaGljc0xh
eWVyV0MoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJPYnNlcnZlcigpIHsgbV9vYnNlcnZl
ciA9IG51bGxwdHI7IH0KKworICAgIC8vIEdyYXBoaWNzTGF5ZXIKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgcHJpbWFyeUxheWVySUQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFNob3VsZENsaXBUb0xh
eWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXllcj4mJiwgaW50IGlu
ZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+
JiYsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRC
ZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykgb3ZlcnJp
ZGU7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxH
cmFwaGljc0xheWVyPiYmIG5ld0NoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUZyb21Q
YXJlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihSZWZQdHI8R3JhcGhpY3NM
YXllcj4mJik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciopOwor
ICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYpOwor
ICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zv
cm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldFByZXNlcnZlczNEKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFza3NUb0Jv
dW5kcyhib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNDbGlwcGluZ1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJv
b2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNWaXNpYmxlKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBD
b250ZW50c0xheWVyUHVycG9zZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGREaXJlY3RseUNv
bXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHVzZXNDb250ZW50c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREZWJ1
Z0JvcmRlcihjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IHdpZHRoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBvdmVycmlkZTsKKyAgICBib29sIHNl
dEZpbHRlcnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAg
IGJvb2wgc2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21wb3NpdGlu
Z1N0YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAg
IHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxX
Q0xheWVyQ2hhbmdlPik7CisKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIGdlbmVyYXRlTGF5ZXJJRCgpOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlu
a2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPjsKKworICAgIEdyYXBoaWNzTGF5ZXJXQyogbV9w
cmV2OworICAgIEdyYXBoaWNzTGF5ZXJXQyogbV9uZXh0OworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVySUQgeyBnZW5lcmF0ZUxheWVySUQoKSB9Owor
ICAgIE9ic2VydmVyKiBtX29ic2VydmVyOworICAgIFBsYXRmb3JtTGF5ZXIqIG1fcGxhdGZvcm1M
YXllciB7IG51bGxwdHIgfTsKKyAgICBXZWJDb3JlOjpDb2xvciBtX3NvbGlkQ29sb3I7CisgICAg
V2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgIE9wdGlvblNldDxXQ0xheWVy
Q2hhbmdlPiBtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lk
dGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzRmNTAwMmY1NGE0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3RvcmUu
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0Jh
Y2tpbmdTdG9yZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
V0NCYWNraW5nU3RvcmUoKSB7IH0KKyAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZUJ1
ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+JiYgaW1hZ2UpIHsgbV9pbWFnZUJ1ZmZl
ciA9IFdURk1vdmUoaW1hZ2UpOyB9CisgICAgU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAoKSBjb25z
dCB7IHJldHVybiBtX2JpdG1hcC5nZXQoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYm9vbCBoYXNJbWFnZUJ1ZmZlciA9IG1faW1hZ2VCdWZmZXI7CisgICAgICAgIGVuY29kZXIg
PDwgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlmIChoYXNJbWFnZUJ1ZmZlcikgeworICAgICAg
ICAgICAgYXV0byBoYW5kbGUgPSBzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJT
aGFyZWFibGVCYWNrZW5kJj4oKm1faW1hZ2VCdWZmZXItPmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
LmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAgZW5jb2RlciA8
PCBoYW5kbGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rl
cj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFdDQmFja2luZ1N0b3JlJiByZXN1bHQpCisgICAgeworICAgICAgICBib29sIGhhc0lt
YWdlQnVmZmVyOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0ltYWdlQnVmZmVyKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGhhc0ltYWdlQnVmZmVyKSB7
CisgICAgICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5tX2JpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlKHN0ZDo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YjU2Njg3YjJiODkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xh
eWVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJXQy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitXQ0xheWVyRmFjdG9yeTo6V0NMYXllckZhY3RvcnkoR3JhcGhpY3NMYXllcldD
OjpPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQoreworfQor
CitSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gV0NMYXllckZhY3Rvcnk6OmNyZWF0ZUdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSBsYXllclR5cGUsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBHcmFwaGljc0xheWVyV0MobGF5ZXJUeXBlLCBjbGllbnQsIG1fb2JzZXJ2ZXIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmIxMmQyYmU1MTFiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmgKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJXQy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDTGF5ZXJGYWN0b3J5IGZpbmFsIDogcHVibGljIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBXQ0xheWVyRmFjdG9y
eShHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJik7CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICBSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xheWVyV0M6
Ok9ic2VydmVyJiBtX29ic2VydmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ5NGM2ZjA1OGVlMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJ
bmZvLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXQ0JhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPG9w
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBXQ0xheWVyQ2hhbmdl
IDogdWludDMyX3QgeworICAgIENoaWxkcmVuICAgICAgICAgICAgICAgID0gMSA8PCAgMCwKKyAg
ICBNYXNrTGF5ZXIgICAgICAgICAgICAgICA9IDEgPDwgIDEsCisgICAgUmVwbGljYUxheWVyICAg
ICAgICAgICAgPSAxIDw8ICAyLAorICAgIEdlb21ldHJ5ICAgICAgICAgICAgICAgID0gMSA8PCAg
MywKKyAgICBQcmVzZXJ2ZXMzRCAgICAgICAgICAgICA9IDEgPDwgIDQsCisgICAgQ29udGVudHNW
aXNpYmxlICAgICAgICAgPSAxIDw8ICA1LAorICAgIEJhY2tmYWNlVmlzaWJpbGl0eSAgICAgID0g
MSA8PCAgNiwKKyAgICBNYXNrc1RvQm91bmRzICAgICAgICAgICA9IDEgPDwgIDcsCisgICAgU29s
aWRDb2xvciAgICAgICAgICAgICAgPSAxIDw8ICA4LAorICAgIERlYnVnVmlzdWFscyAgICAgICAg
ICAgID0gMSA8PCAgOSwKKyAgICBSZXBhaW50Q291bnQgICAgICAgICAgICA9IDEgPDwgMTAsCisg
ICAgQ29udGVudHNSZWN0ICAgICAgICAgICAgPSAxIDw8IDExLAorICAgIENvbnRlbnRzQ2xpcHBp
bmdSZWN0ICAgID0gMSA8PCAxMiwKKyAgICBPcGFjaXR5ICAgICAgICAgICAgICAgICA9IDEgPDwg
MTMsCisgICAgQmFja2luZ1N0b3JlICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgIFRyYW5zZm9y
bSAgICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICBDaGlsZHJlblRyYW5zZm9ybSAgICAgICA9
IDEgPDwgMTYsCisgICAgRmlsdGVycyAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAorICAgIEJh
Y2tkcm9wRmlsdGVycyAgICAgICAgID0gMSA8PCAxOCwKKyAgICBQbGF0Zm9ybUxheWVyICAgICAg
ICAgICA9IDEgPDwgMTksCit9OworCitzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkOworICAgIE9wdGlvblNldDxX
Q0xheWVyQ2hhbmdlPiBjaGFuZ2VzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQ+IGNoaWxkcmVuOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtYXNrTGF5ZXI7CisgICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IHJlcGxpY2FMYXll
cjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IGJvdW5kc09yaWdpbjsKKyAgICBib29sIG1hc2tzVG9Cb3VuZHM7
CisgICAgYm9vbCBzaG93RGVidWdCb3JkZXI7CisgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXI7
CisgICAgYm9vbCBjb250ZW50c1Zpc2libGU7CisgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7
CisgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOwor
ICAgIFdlYkNvcmU6OkNvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgb3BhY2l0eTsK
KyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworICAgIGludCByZXBhaW50Q291bnQ7CisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBXQ0JhY2tpbmdTdG9yZSBiYWNr
aW5nU3RvcmU7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAg
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zIGJhY2tkcm9wRmlsdGVyczsKKyAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCBjb250
ZW50c0NsaXBwaW5nUmVjdDsKKyAgICB1aW50NjRfdCBncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXI7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IGlkOworICAgICAg
ICBlbmNvZGVyIDw8IGNoYW5nZXM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6Q2hpbGRyZW4pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuOworICAgICAgICBp
ZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgbWFza0xheWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJl
cGxpY2FMYXllcikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcmVwbGljYUxheWVyOworICAgICAg
ICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KQorICAgICAgICAgICAgZW5j
b2RlciA8PCBwb3NpdGlvbiA8PCBhbmNob3JQb2ludCA8PCBzaXplIDw8IGJvdW5kc09yaWdpbjsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgcHJlc2VydmVzM0Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250
ZW50c1Zpc2libGU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Zh
Y2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZmFjZVZpc2liaWxpdHk7
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgbWFza3NUb0JvdW5kczsKKyAgICAgICAgaWYgKGNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgZW5jb2RlciA8PCBzb2xp
ZENvbG9yOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFs
cykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc2hvd0RlYnVnQm9yZGVyIDw8IGRlYnVnQm9yZGVy
Q29sb3IgPDwgZGVidWdCb3JkZXJXaWR0aDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpSZXBhaW50Q291bnQpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHNob3dSZXBhaW50
Q291bnRlciA8PCByZXBhaW50Q291bnQ7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1JlY3Q7
CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1Jl
Y3QpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OworICAgICAg
ICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAgICAgICAgICBlbmNv
ZGVyIDw8IG9wYWNpdHk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFj
a2luZ1N0b3JlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNraW5nU3RvcmU7CisgICAgICAg
IGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICAgICAgZW5j
b2RlciA8PCB0cmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuVHJhbnNm
b3JtOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGZpbHRlcnM7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZHJv
cEZpbHRlcnMgPDwgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERl
Y29kZXI+CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBXQ0xheWVyVXBhdGVJbmZvJiByZXN1bHQpCisgICAgeworICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZXMpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hp
bGRyZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5ZXIpIHsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tMYXllcikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQucmVwbGljYUxheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hbmNob3JQb2ludCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2l6
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuYm91bmRzT3JpZ2luKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6UHJlc2VydmVzM0QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnByZXNlcnZlczNEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNW
aXNpYmxlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50
c1Zpc2libGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxp
dHkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tmYWNlVmlz
aWJpbGl0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tzVG9Cb3VuZHMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVz
dWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKSB7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zb2xpZENvbG9yKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6RGVidWdWaXN1YWxzKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5zaG93RGVidWdCb3JkZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyQ29s
b3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyV2lkdGgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnNob3dSZXBhaW50Q291bnRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwYWludENvdW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KSB7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1JlY3QpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNDbGlwcGluZ1JlY3QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5i
YWNraW5nU3RvcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5zZm9ybSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKSB7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlblRyYW5zZm9ybSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpC
YWNrZHJvcEZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmJhY2tkcm9wRmlsdGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzUmVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK3N0cnVjdCBXQ1VwYXRlSW5mbyB7CisgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIHJvb3RMYXllcjsKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBhZGRlZExheWVyczsKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiByZW1vdmVkTGF5
ZXJzOworICAgIFZlY3RvcjxXQ0xheWVyVXBhdGVJbmZvPiBjaGFuZ2VkTGF5ZXJzOworCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCByb290TGF5ZXI7CisgICAgICAgIGVu
Y29kZXIgPDwgYWRkZWRMYXllcnM7CisgICAgICAgIGVuY29kZXIgPDwgcmVtb3ZlZExheWVyczsK
KyAgICAgICAgZW5jb2RlciA8PCBjaGFuZ2VkTGF5ZXJzOworICAgIH0KKworICAgIHRlbXBsYXRl
IDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgV0NVcGF0ZUluZm8mIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJvb3RMYXllcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFkZGVkTGF5ZXJz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucmVtb3ZlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZWRMYXllcnMpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViS2l0OjpXQ0xheWVyQ2hhbmdlPiB7CisgICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlLAorICAgICAgICBXZWJL
aXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U6Ok1hc2tMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5
ZXIsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6R2VvbWV0cnksCisgICAgICAgIFdl
YktpdDo6V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QsCisgICAgICAgIFdlYktpdDo6V0NMYXll
ckNoYW5nZTo6Q29udGVudHNWaXNpYmxlLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6
OkJhY2tmYWNlVmlzaWJpbGl0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpNYXNr
c1RvQm91bmRzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IsCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzLAorICAgICAgICBXZWJL
aXQ6OldDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q29u
dGVudHNDbGlwcGluZ1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6T3BhY2l0
eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUsCisgICAgICAg
IFdlYktpdDo6V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U6OkZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0
ZXJzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIKKyAgICA+
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFr
ZQppbmRleCBlYjQwYjRjNjZkZDguLjQ5YTNmNDFlZjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNh
aXJvLmNtYWtlCkBAIC00NCw2ICs0NCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
QUlSTyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dS
QVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0dSQVBISUNTX0xBWUVSX1dDIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VH
TCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442568</attachid>
            <date>2021-10-26 22:34:50 -0700</date>
            <delta_ts>2021-10-26 22:36:22 -0700</delta_ts>
            <desc>wrong patch</desc>
            <filename>wc-2021-10-25.diff</filename>
            <type>text/plain</type>
            <size>156016</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOTAwMTYxMDY3YzQuLmZm
YjA2ZmM1YzhhOCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDIxLTEwLTI0ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBw
cm9jZXNzIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZToKKworMjAyMS0xMC0xOCAg
RnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2lu
Q2Fpcm9dIE5ldyBHcmFwaGljc0xheWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zV2luQ2Fpcm8uY21ha2U6CisKIDIwMjEtMTAtMjEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEdpdEh1YiBuYW1lIHRvIGNvbnRyaWJ1dG9y
cy5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZmM3NjViODBiYmNlLi4xMTYwOWY1NjRiMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMS0xMC0yNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIE5ldyBHcmFwaGljc0xheWVy
IGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2VXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6cGxhdGZvcm1MYXllciBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6
IERpc3BsYXlMaXN0CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBkb2Vzbid0IGhhdmUgYSBIREMu
IERvIG5vdGhpbmcgZm9yIERpc3BsYXlMaXN0CisgICAgICAgIGNvbnRleHQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkRpcmVjdDNEUHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZSk6CisgICAgICAgIFBhaW50IGEg
ZnJhbWUgYnkgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UgaW5zdGVhZCBv
ZgorICAgICAgICBDYWlybyBBUEkgZm9yIERpc3BsYXlMaXN0LgorCiAyMDIxLTEwLTIxICBDYXRo
aWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBUaGUgaW50cmlzaWMg
c2l6ZSBvZiBwaWN0dXJlIGltYWdlIGluc2lkZSBhIHRlbXBsYXRlIGlzIGFsd2F5cyB6ZXJvCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCBkMjI1NjkwZjVlMDQuLjVkZGFk
OWMyNThlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0xMiw2ICsx
Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2xvYWRlci9hcmNoaXZlL2NmIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jZiIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2MiCiApCiAKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwpAQCAtMjQsNiArMjUsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRl
ckhhcmZCdXp6LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2VXQy5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAKQEAgLTQ0LDYgKzQ3LDEwIEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3dpbi9QRUltYWdlLmNwcAogKQogCitsaXN0
KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXIuaAorKQorCiBsaXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUwogICAgIGNvbWN0bDMyCiAgICAgY3J5cHQzMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuY3BwCmluZGV4IGYwYzhlNGU0NTRkMy4uZGMwYzU1ZTIzZGFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwCkBAIC0zMyw2ICszMywxMCBA
QAogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIgLy8gflJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlIG5lZWRzIGl0CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
JiBhdHRycykKQEAgLTEzMCw3ICsxMzQsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgYXZhaWxhYmxlRXh0ZW5zaQogICAg
ICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKIH0KIAotI2lmICFQ
TEFURk9STShDT0NPQSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmgKaW5k
ZXggZDljNzMzYjZjMzRlLi5hOTdlMzViZmYyMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eUJhc2UuaApAQCAtOTYsNiArOTYsOSBAQCBwcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX2Rpc3BsYXlCdWZmZXI7CisjZWxpZiBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyQ29udGFpbmVyIGNyZWF0ZVBs
YXRmb3JtTGF5ZXIoKSA9IDA7CisgICAgUGxhdGZvcm1MYXllckNvbnRhaW5lciBtX3BsYXRmb3Jt
TGF5ZXI7CiAjZW5kaWYKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMjgyZTA4NmNkZjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oIgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpICYmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBjcmVhdGVQbGF0
Zm9ybUxheWVyKCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYTM5ZTA4Y2NjZTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9X
Q1BsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitw
cml2YXRlOgorICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgZmluYWwgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggZDVhM2JhOTQzOGE5Li5kODYx
YjkxNTBjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0YXRp
YyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBoaWNz
Q29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBz
dXBwb3J0QWxwaGFCbGVuZCkKIHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNFKENBSVJPKQog
ICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggZTZkZWI1ZWMxMDM4
Li5jOWQwOGM3YmUyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24uY3BwCkBAIC0yODU3LDE1ICsyODU3LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJyZW50RnJhbWUo
V2ViCiAgICAgICAgIEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCk7
CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIGlm
IChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAgICAgIGltYWdl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOwotCi0g
ICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBp
ZiAoaW1hZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0
YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlS
T19GT1JNQVRfSU5WQUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpKTsKKyAgICAg
ICAgICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkp
OworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1JlY3Quc2l6ZSgp
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3Jt
IG5lZWRzIHRvIGltcGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhp
Y3MgY29udGV4dCEiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJkZC4uNzljNjYwZWQ2NzZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwOCBAQAorMjAyMS0xMC0yNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIE5ldyBHcmFwaGljc0xh
eWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBHcmFwaGljc0xheWVyIGltcGxlbWVudGF0aW9u
IEdyYXBoaWNzTGF5ZXJXQyB3aGljaAorICAgICAgICB0cmFuc2ZlcnMgR3JhcGhpY3NMYXllciB0
cmVlIHRvIEdQVSBwcm9jZXNzIGFuZCBydW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgKFRleHR1
cmVNYXBwZXIpIGluIEdQVSBwcm9jZXNzLgorCisgICAgICAgIEluIEdQVSBwcm9jZXNzIG1vZGUs
IFdlYkdMIGlzIHJ1biBpbiBHUFUgcHJvY2Vzcy4gU28sIHRoZQorICAgICAgICBjb21wb3NpdG9y
IHNob3VsZCBiZSBydW4gaW4gR1BVIHByb2Nlc3MuIE90aGVyd2lzZSwgdGhlIG91dHB1dAorICAg
ICAgICB0ZXh1dHJlIG9mIFdlYkdMIGhhcyB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIEdQVSBwcm9j
ZXNzIHRvIHRoZQorICAgICAgICBjb21wb3NpdG9yIHByb2Nlc3MgKFVJIHByb2Nlc3Mgb3Igd2Vi
IHByb2Nlc3MpLgorCisgICAgICAgIEJlY2F1c2UgQU5HTEUgaXNuJ3QgdGhyZWFkLXNhZmUsIHRo
ZSBjb21wb3NpdG9yIGFuZCBXZWJHTCBzaG91bGQKKyAgICAgICAgYmUgcnVuIGluIHRoZSBzYW1l
IHRocmVhZCBpbiBHUFUgcHJvY2Vzcy4KKworICAgICAgICBFbmFibGluZyBncHVfcHJvY2Vzc193
ZWJnbCBhbHNvIGVuYWJsZXMgR1BVIHByb2Nlc3MgY29tcG9zaXRpbmcgbm93LgorICAgICAgICA+
IHJlZyBhZGQgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNz
X3dlYmdsIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAgZ3B1X3Byb2Nlc3NfY2FudmFz
X3JlbmRlcmluZyBjYW4gYWxzbyBiZSBlbmFibGVkLgorICAgICAgICA+IHJlZyBhZGQgSEtFWV9D
VVJSRU5UX1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNzX2NhbnZhc19yZW5kZXJp
bmcgL3QgUkVHX0RXT1JEIC9kIDEgL2YKKworICAgICAgICBFbmFibGluZyBncHVfcHJvY2Vzc19k
b21fcmVuZGVyaW5nIGlzIHN0aWxsIGV4cGVyaW1lbnRhbC4KKyAgICAgICAgPiByZWcgYWRkIEhL
RVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19kb21fcmVuZGVy
aW5nIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5k
cyByZXN0b3JlIHRoZSBub24tR1BVIHByb2Nlc3MgbW9kZS4KKyAgICAgICAgPiByZWcgZGVsZXRl
IEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19jYW52YXNf
cmVuZGVyaW5nIC9mCisgICAgICAgID4gcmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0
d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nlc3Nfd2ViZ2wgL2YKKyAgICAgICAgPiByZWcgZGVsZXRl
IEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19kb21fcmVu
ZGVyaW5nIC9mCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGVXQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBH
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3M6
OnNoYXJlZFNjZW5lQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OnNjaGVkdWxlRnJl
ZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3QuaDogQWRkZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXQ1NjZW5lOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V0NTY2VuZTo6fldD
U2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lOjp1cGRhdGUpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldDU2NlbmVDb250ZXh0OjpXQ1NjZW5lQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldD
U2NlbmVDb250ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXQ1Nj
ZW5lQ29udGV4dDo6Y3JlYXRlVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OldDU2Nl
bmVDb250ZXh0Ojpzd2FwQnVmZmVycyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9XQ1NjZW5lQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1dDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcjo6ZW5zdXJlSG9sZGVyRm9yV2luZG93KToKKyAg
ICAgICAgKFdlYktpdDo6V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OnJlbW92ZUhvbGRlcik6
CisgICAgICAgICogR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzTWFpbik6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190
aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKGNvbmRpdGlvbnNfZm9y
X2hlYWRlcik6CisgICAgICAgICogU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjpEcmF3aW5nQXJlYVByb3h5V0MpOgorICAgICAgICAo
V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5V0M6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eVdDOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eVdDOjp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
V0M6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5V0M6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eVdDOjpkaXNjYXJkQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy93aW4vUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFpbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5V0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6Y3JlYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OlJlbW90ZVdDTGF5ZXJU
cmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJv
eHk6On5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVI
b3N0UHJveHk6OmRpZFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Ojp3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjpXQ1BsYXRmb3JtTGF5
ZXJHQ0dMKToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6Z3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnN1cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhV0M6OkRyYXdpbmdBcmVhV0MpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
Ojp+RHJhd2luZ0FyZWFXQyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBo
aWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dXBkYXRl
Um9vdExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6YXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6
c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
V0M6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OmZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjppc0NvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhV0M6OnVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhV0M6OnNlbmRVcGRhdGVBQyk6CisgICAgICAgIChXZWJLaXQ6OnNob3VsZFBhaW50Qm91
bmRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNlbmRVcGRhdGVOb25B
Qyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8pOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRz
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZp
Y2VTY2FsZUZhY3RvciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0Ry
YXdpbmdBcmVhV0MuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dy
YXBoaWNzTGF5ZXJXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVy
V0M6OkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
fkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Z2Vu
ZXJhdGVMYXllcklEKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpwcmltYXJ5
TGF5ZXJJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleCk6CisgICAg
ICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhp
Y3NMYXllcldDOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldFJlcGxpY2F0ZWRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRBbmNo
b3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Qm91bmRzT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
S2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
OjpzZXRDb250ZW50c0NsaXBwaW5nUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
OjpzZXRDb250ZW50c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3Jh
cGhpY3NMYXllcldDOjp1c2VzQ29udGVudHNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6
R3JhcGhpY3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBo
aWNzTGF5ZXJXQzo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ry
b3BGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJv
cEZpbHRlcnNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldDQmFja2luZ1N0b3JlOjpXQ0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldD
QmFja2luZ1N0b3JlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0
b3JlOjpzZXRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpi
aXRtYXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldDTGF5ZXJGYWN0b3J5OjpXQ0xheWVyRmFjdG9yeSk6CisgICAgICAgIChX
ZWJLaXQ6OldDTGF5ZXJGYWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXQ0xheWVyVXBhdGVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
Q0xheWVyVXBhdGVJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ1VwYXRlSW5mbzo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NVcGF0ZUluZm86OmRlY29kZSk6CisK
IDIwMjEtMTAtMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgd2VicHVzaGQgcGxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBmYjIwN2M0NjM2
Y2QuLmU5NmZhZmUwOTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMz
MCw2ICszMzQsMzAgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb25maWd1cmVM
b2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW0KICNlbmRpZgogfQogCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLmVuc3VyZShpZGVudGlmaWVyLCBbJl0oKSB7Cisg
ICAgICAgIHJldHVybiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgqdGhpcywgV1RGTW92
ZShpZGVudGlmaWVyKSwgbmF0aXZlV2luZG93KTsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhv
c3RNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGF1dG8gaXRlciA9IG1fcmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xNYXAuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX3JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisjZW5kaWYKKwogYm9vbCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiB7CiAg
ICAgZm9yIChhdXRvJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kTWFwLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCA5YzUyMzY0MTQyMjQuLmVhMzVjYjQ0
MzU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvVENDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNpbmNs
dWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwpAQCAtOTEsNiArOTUsMTAgQEAgc3RydWN0IE1lZGlhT3ZlcnJpZGVzRm9yVGVzdGluZzsKIHN0
cnVjdCBSZW1vdGVBdWRpb1Nlc3Npb25Db25maWd1cmF0aW9uOwogc3RydWN0IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnM7CiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCitjbGFzcyBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q7CisjZW5kaWYKKwogY2xhc3MgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+CiAg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6Tm93UGxheWluZ01hbmFnZXI6OkNsaWVudApAQCAtMTYxLDYg
KzE2OSwxMCBAQCBwdWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdl
RGVjb2RlckFWRlByb3h5KCk7CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykK
KyAgICBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworI2VuZGlmCisKICAgICB2b2lk
IHVwZGF0ZVN1cHBvcnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRV
bmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3Q7CkBAIC0yMjYsNiArMjM4LDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
Jik7CiAgICAgdm9pZCBjb25maWd1cmVMb2dnaW5nQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBXVEZM
b2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsKTsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKKyAgICB2b2lkIGNyZWF0ZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9z
dElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgdm9pZCByZWxlYXNlV0NM
YXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcik7CisjZW5kaWYK
KwogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6
OkNvbm5lY3Rpb24mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKQEAgLTMwNSw2ICszMjIs
MTEgQEAgcHJpdmF0ZToKICAgICB1c2luZyBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYXAg
PSBIYXNoTWFwPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lcklkZW50aWZpZXIsIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJQcm94eT4+OwogICAgIFJlbW90ZUF1
ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcCBtX3JlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hcDsK
IAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB1c2luZyBSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RNYXAgPSBIYXNoTWFwPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+PjsKKyAgICBSZW1vdGVXQ0xheWVyVHJlZUhvc3RN
YXAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXA7CisjZW5kaWYKKwogICAgIFJlZlB0cjxSZW1v
dGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eT4gbV9yZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVu
ZXI7CiAgICAgYm9vbCBtX2lzQWN0aXZlTm93UGxheWluZ1Byb2Nlc3MgeyBmYWxzZSB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGMxYmY4MDE5Y2VhYi4uMzkxYzE5ZmU5ZDg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNTEsNiArNTEsMTAgQEAgbWVzc2Fn
ZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAg
ICAgUmVsZWFzZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcihXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1h
bmRMaXN0ZW5lcklkZW50aWZpZXIgaWRlbnRpZmllcikKICAgICBTZXRVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKICAgICBDb25maWd1cmVMb2dnaW5nQ2hh
bm5lbChTdHJpbmcgY2hhbm5lbE5hbWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUg
c3RhdGUsIGVudW06dWludDhfdCBXVEZMb2dMZXZlbCBsZXZlbCkKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisgICAgQ3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVI
b3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCisgICAgUmVs
ZWFzZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRl
bnRpZmllcikKKyNlbmRpZgogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKaW5kZXggNTQxZjViMGZmMmNkLi5hNzI2ZDdl
MTJiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaApAQCAtNDIsNiArNDIs
MTAgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgog
I2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisjaW5jbHVkZSAiV0NTaGFyZWRT
Y2VuZUNvbnRleHRIb2xkZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBOb3dQbGF5aW5nTWFuYWdlcjsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CkBAIC05Miw2ICs5
NiwxMCBAQCBwdWJsaWM6CiAgICAgV29ya1F1ZXVlJiBsaWJXZWJSVENDb2RlY3NRdWV1ZSgpOwog
I2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgV0NTaGFyZWRTY2VuZUNv
bnRleHRIb2xkZXImIHNoYXJlZFNjZW5lQ29udGV4dCgpIHsgcmV0dXJuIG1fc2hhcmVkU2NlbmVD
b250ZXh0OyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWUDkpCiAgICAgdm9pZCBlbmFibGVWUDlE
ZWNvZGVycyhib29sIHNob3VsZEVuYWJsZVZQOERlY29kZXIsIGJvb2wgc2hvdWxkRW5hYmxlVlA5
RGVjb2RlciwgYm9vbCBzaG91bGRFbmFibGVWUDlTV0RlY29kZXIpOwogI2VuZGlmCkBAIC0xODQs
NiArMTkyLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9saWJXZWJSVEND
b2RlY3NRdWV1ZTsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFdD
U2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIG1fc2hhcmVkU2NlbmVDb250ZXh0OworI2VuZGlmCisK
ICAgICBzdHJ1Y3QgR1BVU2Vzc2lvbiB7CiAgICAgICAgIFN0cmluZyBtZWRpYUNhY2hlRGlyZWN0
b3J5OwogI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuaAppbmRleCBlZjQxZWE2MDgyYmEuLmEwNzI5NzY1Y2I1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmgKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoKTsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQtPnBs
YXRmb3JtTGF5ZXIoKTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgR3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9u
QnVmZmVyJiYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1Jl
cXVlc3QuY3BwCmluZGV4IDMyNmIwN2YyZWJkZS4uNWE2Y2U2NWU3NDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNDIsMTAgKzQyLDEy
IEBAIHN0YXRpYyBib29sIGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzOwog
CiB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6c2NoZWR1bGVGcmVl
V2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogeworI2lmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CiAgICAgaWYgKGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKQogICAgICAg
ICByZXR1cm47CiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoZnJlZVdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzVGltZW91dCwgZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKTsKICAg
ICBkaWRTY2hlZHVsZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyA9IHRydWU7CisjZW5kaWYK
IH0KIAogdm9pZCBTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZyZWVXZWJH
TFJlbmRlcmluZ1Jlc291cmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzQ4YzBiYWI5MTk0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIgorCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXQ1NjZW5lLmgiCisj
aW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiByZW1vdGVH
cmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlV0NMYXllclRyZWVIb3N0PiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5
ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQor
eworICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4oY29ubmVjdGlv
blRvV2ViUHJvY2VzcywgaWRlbnRpZmllciwgbmF0aXZlV2luZG93KTsKK30KKworUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgY29ubmVjdGlvblRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKKyAgICA6IG1fY29ubmVj
dGlvblRvV2ViUHJvY2Vzcyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihjb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdwdVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5lbnN1cmVI
b2xkZXJGb3JXaW5kb3cobmF0aXZlV2luZG93KSkKK3sKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlV0NMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmll
ci50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4o
KTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNo
KFtzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIGdsQ29udGV4dEhvbGRlciA9IG1fc2hhcmVkU2NlbmVD
b250ZXh0SG9sZGVyLmdldCgpLCBuYXRpdmVXaW5kb3ddIHsKKyAgICAgICAgaWYgKCFnbENvbnRl
eHRIb2xkZXItPmNvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHRIb2xkZXItPmNvbnRleHQu
ZW1wbGFjZShuYXRpdmVXaW5kb3cpOworICAgICAgICBzY2VuZS0+aW5pdGlhbGl6ZSgqZ2xDb250
ZXh0SG9sZGVyLT5jb250ZXh0KTsKKyAgICB9KTsKK30KKworUmVtb3RlV0NMYXllclRyZWVIb3N0
Ojp+UmVtb3RlV0NMYXllclRyZWVIb3N0KCkKK3sKKyAgICBBU1NFUlQobV9jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKTsKKyAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZl
ck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVI
b3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAg
ICBhdXRvIGdsQ29udGV4dEhvbGRlciA9IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Z3B1UHJv
Y2VzcygpLnNoYXJlZFNjZW5lQ29udGV4dCgpLnJlbW92ZUhvbGRlcihtX3NoYXJlZFNjZW5lQ29u
dGV4dEhvbGRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZW1vdGVHcmFwaGljc0NvbnRleHRH
TFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtnbENvbnRleHRIb2xkZXIgPSBXVEZNb3ZlKGds
Q29udGV4dEhvbGRlciksIHNjZW5lID0gV1RGTW92ZShtX3NjZW5lKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgLy8gRGVzdHJveSBzY2VuZSBvbiB0aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZC4KKyAg
ICAgICAgc2NlbmUgPSBudWxscHRyOworICAgICAgICAvLyBnbENvbnRleHRIb2xkZXIgY2FuIGJl
IGRlc3Ryb3llZCBvbiB0aGUgU3RyZWFtV29ya1F1ZXVlIHRocmVhZCBiZWNhdXNlIGl0IGhhc09u
ZVJlZi4KKyAgICB9KTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVXQ0xheWVyVHJlZUhv
c3Q6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fY29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVX
Q0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXll
clRyZWVIb3N0Ojp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCit7CisgICAgYXV0byByZW1v
dGVHQ0dMID0gV1RGOjptYXAodXBkYXRlLmNoYW5nZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXll
clVwZGF0ZSkgLT4gUmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiB7CisgICAgICAgIGlm
IChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewor
ICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wobWFrZU9iamVjdElkZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyVHlwZT4obGF5ZXJVcGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICBy
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3
ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9
IFdURk1vdmUodXBkYXRlKSwgcmVtb3RlR0NHTCA9IFdURk1vdmUocmVtb3RlR0NHTCldKCkgbXV0
YWJsZSB7CisgICAgICAgIHNjZW5lLT51cGRhdGUoV1RGTW92ZSh1cGRhdGUpLCBXVEZNb3ZlKHJl
bW90ZUdDR0wpKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFr
VGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRVcGRhdGUoKSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19M
QVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjMyOGRiM2RkYjQyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJX
Q0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiV0NTaGFyZWRTY2VuZUNvbnRl
eHRIb2xkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xh
c3MgVGV4dHVyZU1hcHBlcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworY2xhc3MgV0NTY2VuZTsKK3N0cnVjdCBXQ1Vw
YXRlSW5mbzsKKworY2xhc3MgUmVtb3RlV0NMYXllclRyZWVIb3N0IDogcHVibGljIElQQzo6TWVz
c2FnZVJlY2VpdmVyLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVtb3RlV0NMYXllclRy
ZWVIb3N0KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5
ZXJUcmVlSG9zdD4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldD
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgUmVt
b3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBXZWJLaXQ6OldD
TGF5ZXJUcmVlSG9zdElkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdyk7CisgICAgflJl
bW90ZVdDTGF5ZXJUcmVlSG9zdCgpOworICAgIC8vIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lk
IHVwZGF0ZShXQ1VwYXRlSW5mbyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgSVBD
OjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvblRv
V2ViUHJvY2VzczsKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIG1faWRlbnRpZmllcjsK
KyAgICBSZWZQdHI8V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OkhvbGRlcj4gbV9zaGFyZWRT
Y2VuZUNvbnRleHRIb2xkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDU2NlbmU+IG1fc2NlbmU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19M
QVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjUxNmZkYTQxOTFkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdD
TGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorCittZXNzYWdlcyAtPiBSZW1vdGVXQ0xheWVyVHJlZUhvc3QgTm90UmVmQ291bnRlZCB7Cisg
ICAgVXBkYXRlKHN0cnVjdCBXZWJLaXQ6OldDVXBhdGVJbmZvIHVwZGF0ZUluZm8pCit9CisKKyNl
bmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4yNTE3MTBjYTIzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKQEAgLTAsMCArMSwxOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDU2NlbmUu
aCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
Q1VwYXRlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllcik7CitwdWJs
aWM6CisgICAgTGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllcjo6Q2xpZW50CisgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHRleG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIobnVs
bHB0cik7CisgICAgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1MYXllck5lZWRzRGlzcGxheSgpIG92
ZXJyaWRlIHsgfQorCisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRleG1hcExheWVy
OworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVy
OworfTsKKwordm9pZCBXQ1NjZW5lOjppbml0aWFsaXplKFdDU2NlbmVDb250ZXh0JiBjb250ZXh0
KQoreworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBh
Y3RpdmUgT3BlbkdMIGNvbnRleHQuCisgICAgbV9jb250ZXh0ID0gJmNvbnRleHQ7CisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVRleHR1cmVNYXBwZXIoKTsKK30KKworV0NTY2VuZTo6V0NTY2VuZSgpID0g
ZGVmYXVsdDsKKworV0NTY2VuZTo6fldDU2NlbmUoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKK30KKwordm9p
ZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1
dG8gaWQgOiB1cGRhdGUuYWRkZWRMYXllcnMpIHsKKyAgICAgICAgYXV0byBsYXllciA9IG1ha2VV
bmlxdWU8TGF5ZXI+KCk7CisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikp
OworICAgIH0KKworICAgIGF1dG8gcmVtb3RlR0NHTEl0ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdp
bigpOworCisgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJz
KSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOwor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVu
KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q2hpbGRyZW4oV1RGOjptYXAo
bGF5ZXJVcGRhdGUuY2hpbGRyZW4sIFsmXShhdXRvIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICZtX2xheWVycy5nZXQoaWQpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
Ok1hc2tMYXllcikgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5ZXIg
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLm1hc2tMYXllcikKKyAgICAg
ICAgICAgICAgICBtYXNrTGF5ZXIgPSAmbV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5tYXNrTGF5
ZXIpLT50ZXhtYXBMYXllcjsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRNYXNr
TGF5ZXIobWFza0xheWVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiByZXBsaWNhTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAgICAgICByZXBsaWNhTGF5ZXIgPSAm
bV9sYXllcnMuZ2V0KCpsYXllclVwZGF0ZS5yZXBsaWNhTGF5ZXIpLT50ZXhtYXBMYXllcjsKKyAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVy
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Okdlb21ldHJ5KSB7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0UG9z
aXRpb24obGF5ZXJVcGRhdGUucG9zaXRpb24pOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldEFuY2hvclBvaW50KGxheWVyVXBkYXRlLmFuY2hvclBvaW50KTsKKyAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRTaXplKGxheWVyVXBkYXRlLnNpemUpOworICAgICAgICAg
ICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJvdW5kc09yaWdpbihsYXllclVwZGF0ZS5ib3VuZHNP
cmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0UHJlc2VydmVzM0QobGF5ZXJVcGRhdGUucHJlc2VydmVzM0QpOworICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c1JlY3QobGF5ZXJVcGRhdGUuY29udGVu
dHNSZWN0KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRDb250ZW50c0NsaXBwaW5nUmVjdChsYXllclVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7
CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVu
dHNWaXNpYmxlKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzVmlz
aWJsZShsYXllclVwZGF0ZS5jb250ZW50c1Zpc2libGUpOworICAgICAgICBpZiAobGF5ZXJVcGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkKKyAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUu
YmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJVcGRhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7
CisgICAgICAgICAgICBhdXRvIGJpdG1hcCA9IGxheWVyVXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRt
YXAoKTsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICBsYXllci0+
YmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAg
ICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1
cmVNYXBwZXIsIGltYWdlLmdldCgpLCBiaXRtYXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6
ZSgpIH0pOworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3Rv
cmUobGF5ZXItPmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7
CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dFNvbGlkQ29sb3IobGF5ZXJVcGRhdGUuc29saWRDb2xvcik7CisgICAgICAgIGlmIChsYXllclVw
ZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAg
bGF5ZXItPnRleG1hcExheWVyLnNldERlYnVnVmlzdWFscyhsYXllclVwZGF0ZS5zaG93RGVidWdC
b3JkZXIsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyVXBkYXRlLmRlYnVnQm9y
ZGVyV2lkdGgpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBh
aW50Q291bnRlcihsYXllclVwZGF0ZS5zaG93UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJl
cGFpbnRDb3VudCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6T3BhY2l0eSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRPcGFjaXR5
KGxheWVyVXBkYXRlLm9wYWNpdHkpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRUcmFuc2Zvcm0obGF5ZXJVcGRhdGUudHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVy
VXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclVwZGF0
ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRGaWx0ZXJzKGxheWVyVXBkYXRlLmZpbHRlcnMpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAg
aWYgKGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIucmVzZXQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmICghbGF5ZXItPmJhY2tkcm9wTGF5ZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJMYXll
cj4oKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tk
cm9wTGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
bGF5ZXItPmJhY2tkcm9wTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExheWVyLT5zZXRGaWx0ZXJz
KGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVycyk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tkcm9wTGF5ZXItPnNldFNpemUobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0
KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0UG9z
aXRpb24obGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkubG9jYXRpb24oKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ry
b3BMYXllcihsYXllci0+YmFja2Ryb3BMYXllci5nZXQoKSk7CisgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZp
bHRlcnNSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICgqcmVtb3Rl
R0NHTEl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpy
ZW1vdGVHQ0dMSXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgICAgICAgICAgcGxh
dGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVy
KG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAg
IH0KKyAgICBBU1NFUlQocmVtb3RlR0NHTEl0ZXJhdG9yID09IHJlbW90ZUdDR0wuZW5kKCkpOwor
CisgICAgZm9yIChhdXRvIGlkIDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5
ZXJzLnJlbW92ZShpZCk7CisKKyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBk
YXRlLnJvb3RMYXllciktPnRleG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRp
b25zUmVjdXJzaXZlbHkoTW9ub3RvbmljVGltZTo6bm93KCkpOworCisgICAgSW50U2l6ZSB3aW5k
b3dTaXplID0gZXhwYW5kZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdw
b3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICByb290TGF5ZXItPnBhaW50
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
KworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmMwMDQ2OTI5NWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBw
ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDsKK2NsYXNzIFdDU2NlbmVDb250ZXh0Oworc3RydWN0IFdDVXBhdGVJbmZv
OworCitjbGFzcyBXQ1NjZW5lIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXQ1NjZW5lKTsKK3B1YmxpYzoKKyAgICBXQ1NjZW5lKCk7Cisg
ICAgfldDU2NlbmUoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQmKTsKKyAg
ICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMPj4mJik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IExheWVyOworICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVyPj4gTGF5ZXJNYXA7CisK
KyAgICBXQ1NjZW5lQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworICAgIExheWVyTWFw
IG1fbGF5ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmQ0ZjBjOTBjYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V0NTY2VuZUNvbnRleHQuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1
ZGUgPFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVy
R0wuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
V0NTY2VuZUNvbnRleHQ6OldDU2NlbmVDb250ZXh0KHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sK
KyAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhyZWlu
dGVycHJldF9jYXN0PEdMTmF0aXZlV2luZG93VHlwZT4obmF0aXZlV2luZG93KSk7Cit9CisKK1dD
U2NlbmVDb250ZXh0Ojp+V0NTY2VuZUNvbnRleHQoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgV0NTY2Vu
ZUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IFdDU2NlbmVDb250ZXh0OjpjcmVhdGVUZXh0dXJlTWFwcGVyKCkKK3sKKyAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwordm9pZCBXQ1NjZW5lQ29u
dGV4dDo6c3dhcEJ1ZmZlcnMoKQoreworICAgIG1fZ2xDb250ZXh0LT5zd2FwQnVmZmVycygpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NjZW5lQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
U2NlbmVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5m
ZjRhNTJmMWZkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgVGV4dHVyZU1hcHBl
cjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDU2NlbmVDb250ZXh0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXQ1Nj
ZW5lQ29udGV4dCk7CitwdWJsaWM6CisgICAgV0NTY2VuZUNvbnRleHQodWludDY0X3QgbmF0aXZl
V2luZG93KTsKKyAgICB+V0NTY2VuZUNvbnRleHQoKTsKKworICAgIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IGNy
ZWF0ZVRleHR1cmVNYXBwZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45YjE3ZmZjM2NhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTaGFyZWRTY2VuZUNvbnRleHRI
b2xkZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIENyZWF0aW5nIGEgV0NTY2VuZUNvbnRleHQgZm9yIGEg
d2luZG93IGZhaWxzIGlmIHRoZSB3aW5kb3cgYWxyZWFkeQorLy8gaGFzIG9uZS4gV2hpbGUgbmF2
aWdhdGluZyB0byBhIG5ldyBwYWdlIHdpdGggYSBuZXcgV2ViUHJvY2VzcywgdGhlCisvLyBwcm92
aXNpb25hbCBXZWJLaXQ6OldlYlBhZ2UgaW4gdGhlIG5ldyBXZWJQcm9jZXNzIGhhcyB0aGUgc2Ft
ZQorLy8gd2luZG93IGhhbmRsZS4gV0NTY2VuZUNvbnRleHQgc2hvdWxkIGJlIHNoYXJlZCBhbW9u
ZyBhbGwKKy8vIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdHMgdGhhdCByZW5kZXIgdG8gdGhlIHNhbWUg
bmF0aXZlIHdpbmRvdy4KK2NsYXNzIFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcik7CitwdWJsaWM6
CisgICAgV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1
Y3QgSG9sZGVyIDogUmVmQ291bnRlZDxIb2xkZXI+IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBpbnQ2NF90IG5hdGl2ZVdpbmRvdzsKKyAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBtZW1iZXIgaXMgYWNjZXNzZWQgaW4gdGhlIE9wZW5HTCB0aHJlYWQK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxXQ1NjZW5lQ29udGV4dD4gY29udGV4dDsKKyAgICB9Owor
CisgICAgUmVmPEhvbGRlcj4gZW5zdXJlSG9sZGVyRm9yV2luZG93KGludDY0X3QgbmF0aXZlV2lu
ZG93KQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX2hhc2guYWRkKG5hdGl2ZVdpbmRvdywgbnVsbHB0cik7CisgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIAorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIGhvbGRlciA9IGFkb3B0UmVmKCpuZXcgSG9sZGVy
KTsKKyAgICAgICAgaG9sZGVyLT5uYXRpdmVXaW5kb3cgPSBuYXRpdmVXaW5kb3c7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBob2xkZXIucHRyKCk7CisgICAgICAgIHJldHVybiBo
b2xkZXI7CisgICAgfQorCisgICAgUmVmUHRyPEhvbGRlcj4gcmVtb3ZlSG9sZGVyKFJlZjxIb2xk
ZXI+JiYgaG9sZGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCFob2xkZXItPmhhc09uZVJlZigpKSAKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBtX2hhc2gucmVtb3ZlKGhvbGRlci0+bmF0aXZlV2luZG93KTsKKyAg
ICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxpbnQ2
NF90LCBIb2xkZXIqPiBtX2hhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5jcHAKaW5kZXggZjAxZTYzOWQ5ZDc4Li4yNzIz
NGNiZmI1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJv
Y2Vzc01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJv
Y2Vzc01haW5XaW4uY3BwCkBAIC0zMCwxNCArMzAsMzEgQEAKIAogI2luY2x1ZGUgIkF1eGlsaWFy
eVByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzcy5oIgorI2luY2x1ZGUgPE9iamJh
c2UuaD4KKyNpbmNsdWRlIDx3dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJS
QVJZKHVzZXIzMik7CitTT0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdh
cmVuZXNzQ29udGV4dCwgQk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRF
WFQpKTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3NNYWluV2luIGZp
bmFsOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlTm9TaW5nbGV0b248R1BVUHJvY2Vz
cz4geworcHVibGljOgorICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKQorICAg
ICAgICAgICAgU2V0UHJvY2Vzc0RwaUF3YXJlbmVzc0NvbnRleHRQdHIoKShEUElfQVdBUkVORVNT
X0NPTlRFWFRfUEVSX01PTklUT1JfQVdBUkVfVjIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBTZXRQcm9jZXNzRFBJQXdhcmUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfTsK
IAogaW50IEdQVVByb2Nlc3NNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyAgICAvLyBm
b3IgRGlyZWN0WAorICAgIEhSRVNVTFQgaHIgPSA6OkNvSW5pdGlhbGl6ZUV4KG51bGxwdHIsIENP
SU5JVF9NVUxUSVRIUkVBREVEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW48R1BVUHJvY2Vzc01haW5XaW4+KGFyZ2Ms
IGFyZ3YpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtl
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAwMTU2NWQ1NTA2OTcuLjhj
OTE4NmVlZGJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMSw2ICsxMSwxMCBAQCBh
ZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19XRUJLSVQpCiBsaXN0KEFQUEVORCBXZWJLaXRfU09V
UkNFUwogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4u
Y3BwCiAKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5j
cHAKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisgICAgR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKKwogICAgIEdQVVByb2Nlc3MvbWVkaWEv
d2luL1JlbW90ZU1lZGlhUGxheWVyUHJveHlXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL3dpbi9H
UFVQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTY5LDYgKzczLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9y
ZVdpbi5jcHAKIAorICAgIFVJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCisKICAg
ICBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdp
bi5jcHAKQEAgLTc2LDYgKzgyLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBV
SVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAKIAorICAgIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlXQy5jcHAKKyAgICBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKwogICAgIFdlYlByb2Nlc3MvR1BVL21lZGlhL3dp
bi9WaWRlb0xheWVyUmVtb3RlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCkBAIC05NSw2ICsxMDQsMTAgQEAgbGlzdChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3Bw
CiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAorICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKKwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4v
V2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNw
cApAQCAtMTAyLDYgKzExNSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIGxp
c3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCS0lUX0RJUn0v
R1BVUHJvY2Vzcy9ncmFwaGljcy93YyIKICAgICAiJHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9jbGFz
c2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VC
S0lUX0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCkBAIC0xMTksMTYgKzEzMywyNSBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKKyAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9j
ZXNzL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93YyIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4iCiAg
ICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvV2ViUGFnZS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vd2luIgogKQogCitsaXN0KEFQUEVO
RCBXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdAorCisgICAgV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHkKKykKKwogc2V0KFdlYktpdENvbW1vbkluY2x1ZGVEaXJl
Y3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKIHNldChXZWJLaXRDb21tb25T
eXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVN9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2NTg0
ZDFhZDdlMTUuLjM3NTRhZTQ0NzQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CkBAIC0zNTcsNiArMzU3LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zv
cndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYktpdDo6VHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlRyYW5zYWN0aW9uSUQnLAogICAgICAgICAnV2Vi
S2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYlBhZ2VQcm94
eUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlhSRGV2aWNlSWRlbnRpZmllcicsCkBAIC0zNjgsNiAr
MzY5LDcgQEAgZGVmIGNvbmRpdGlvbnNfZm9yX2hlYWRlcihoZWFkZXIpOgogICAgICAgICAnIklu
cHV0TWV0aG9kU3RhdGUuaCInOiBbIlBMQVRGT1JNKEdUSykiLCAiUExBVEZPUk0oV1BFKSJdLAog
ICAgICAgICAnIkxheWVySG9zdGluZ0NvbnRleHQuaCInOiBbIlBMQVRGT1JNKENPQ09BKSIsIF0s
CiAgICAgICAgICciR2VzdHVyZVR5cGVzLmgiJzogWyJQTEFURk9STShJT1NfRkFNSUxZKSJdLAor
ICAgICAgICAnIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCInOiBbIlVTRShHUkFQSElDU19M
QVlFUl9XQykiXSwKICAgICAgICAgJzxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
Lmg+JzogWyJFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSJdLAogICAgICAgICAnPFdl
YkNvcmUvRGF0YURldGVjdG9yVHlwZS5oPic6IFsiRU5BQkxFKERBVEFfREVURUNUSU9OKSJdLAog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKaW5kZXggNzlmNTNmNTNk
Y2Y5Li43MjJiNWYzNGIwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdp
bmdBcmVhSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5o
CkBAIC0zNyw3ICszNywxMCBAQCBlbnVtIGNsYXNzIERyYXdpbmdBcmVhVHlwZSA6IHVpbnQ4X3Qg
ewogI2VuZGlmCiAgICAgUmVtb3RlTGF5ZXJUcmVlLAogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljcwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3MsCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJf
V0MpCisgICAgV0MsCiAjZW5kaWYKIH07CiAgICAgCkBAIC02Myw2ICs2Niw5IEBAIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU+IHsKICAgICAgICAg
LCBXZWJLaXQ6OkRyYXdpbmdBcmVhVHlwZTo6UmVtb3RlTGF5ZXJUcmVlCiAjZWxpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICAgICAgLCBXZWJL
aXQ6OkRyYXdpbmdBcmVhVHlwZTo6Q29vcmRpbmF0ZWRHcmFwaGljcworI2VuZGlmCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpX
QwogI2VuZGlmCiAgICAgPjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2Mv
RHJhd2luZ0FyZWFQcm94eVdDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjIxYTc3ZmMzNjZiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eVdDLmgi
CisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5m
by5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0RyYXdpbmdBcmVhUHJveHlXQzo6RHJh
d2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5LCBXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZTo6V0Ms
IHdlYlBhZ2VQcm94eSwgcHJvY2VzcykKK3sKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6
OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgUmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pCit7CisgICAgdW5wYWlu
dGVkUmVnaW9uID0gcmVjdDsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2JhY2tpbmdTdG9yZS0+cGFpbnQoY29udGV4dCwgcmVjdCk7CisgICAgdW5w
YWludGVkUmVnaW9uLnN1YnRyYWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9iYWNraW5nU3RvcmUt
PnNpemUoKSkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6c2l6ZURpZENoYW5nZSgp
Cit7CisgICAgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOworICAgIG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQrKzsKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlR2VvbWV0
cnkobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCwgbV9zaXplKSk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eVdDOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJ
RCA9PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQorICAgICAgICBpbmNvcnBvcmF0ZVVw
ZGF0ZSh1cGRhdGVJbmZvKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6RGlkVXBk
YXRlKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlXQzo6ZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRy
ZWVDb250ZXh0JikKK3sKKyAgICBkaXNjYXJkQmFja2luZ1N0b3JlKCk7Cit9CisKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eVdDOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIGlmICh1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQorICAgICAgICBt
X2JhY2tpbmdTdG9yZS5lbXBsYWNlKHVwZGF0ZUluZm8udmlld1NpemUsIHVwZGF0ZUluZm8uZGV2
aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5KTsKKworICAgIG1fYmFja2luZ1N0b3JlLT5p
bmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsKKworICAgIFJlZ2lvbiBkYW1hZ2VSZWdpb247
CisgICAgaWYgKHVwZGF0ZUluZm8uc2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiByZWN0IDogdXBkYXRlSW5mby51cGRhdGVSZWN0cykKKyAgICAgICAgICAg
IGRhbWFnZVJlZ2lvbi51bml0ZShyZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGFtYWdlUmVn
aW9uID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgpKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS5zZXRWaWV3TmVlZHNEaXNwbGF5KGRhbWFnZVJlZ2lvbik7Cit9CisK
K3ZvaWQgRHJhd2luZ0FyZWFQcm94eVdDOjpkaXNjYXJkQmFja2luZ1N0b3JlKCkKK3sKKyAgICBt
X2JhY2tpbmdTdG9yZSA9IHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5
V0MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTE0N2MxMWNmNDczCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94
eVdDLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVnaW9uOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eVdDIGZpbmFsIDogcHVibGljIERyYXdpbmdB
cmVhUHJveHkgeworcHVibGljOgorICAgIERyYXdpbmdBcmVhUHJveHlXQyhXZWJQYWdlUHJveHkm
LCBXZWJQcm9jZXNzUHJveHkmKTsKKworICAgIHZvaWQgcGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlJl
Z2lvbiYgdW5wYWludGVkUmVnaW9uKTsKKworcHJpdmF0ZToKKyAgICAvLyBEcmF3aW5nQXJlYVBy
b3h5CisgICAgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIC8vIG1lc3NhZ2UgaGFuZGVy
cworICAgIHZvaWQgdXBkYXRlKHVpbnQ2NF90LCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdm9p
ZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90LCBjb25zdCBMYXllclRy
ZWVDb250ZXh0Jik7CisKKyAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUlu
Zm8mKTsKKyAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmUoKTsKKworICAgIHVpbnQ2NF90IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAy
MjA4OThjMTIyZmMuLmM3OTcwNmExMjRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdy
YXBoaWNzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eVdDLmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlBvcHVwTWVudVByb3h5V2luLmgiCkBAIC00Nyw2ICs0OCw4IEBAIFBhZ2VDbGllbnRJ
bXBsOjpQYWdlQ2xpZW50SW1wbChXZWJWaWV3JiB2aWV3KQogLy8gUGFnZUNsaWVudCdzIHB1cmUg
dmlydHVhbCBmdW5jdGlvbnMKIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eShXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCiB7CisgICAgaWYgKG1fdmlldy5wYWdlKCktPnByZWZlcmVuY2VzKCkudXNlR1BVUHJvY2Vz
c0ZvcldlYkdMRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJl
YVByb3h5V0M+KCptX3ZpZXcucGFnZSgpLCBwcm9jZXNzKTsKICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcz4oKm1fdmlldy5wYWdlKCksIHBy
b2Nlc3MpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXgg
MWRmZjRjYzY4M2VhLi4wYzdmNDBjYjQ5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1
cmF0aW9uLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3Mu
aCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
Yk1vdXNlRXZlbnQuaCIKQEAgLTQ5MSwzMSArNDkyLDQzIEBAIHZvaWQgV2ViVmlldzo6cGFpbnQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogICAgIGlmIChkaXJ0eVJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wYWdlLT5lbmRQcmludGluZygpOwotICAg
IGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlDb29y
ZGluYXRlZEdyYXBoaWNzKj4obV9wYWdlLT5kcmF3aW5nQXJlYSgpKSkgewotICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHBvcnQgV2ViS2l0MSdzIHJlY3QgY29hbGVzY2luZyBsb2dpYyBoZXJl
LgotICAgICAgICBSZWdpb24gdW5wYWludGVkUmVnaW9uOworICAgIGlmIChtX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpIHsKKyAgICAgICAgYXV0byBwYWludGVyID0gWyZdKGF1dG8gZHJhd2luZ0FyZWEp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVjdCBj
b2FsZXNjaW5nIGxvZ2ljIGhlcmUuCisgICAgICAgICAgICBSZWdpb24gdW5wYWludGVkUmVnaW9u
OwogI2lmIFVTRShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fp
cm9fd2luMzJfc3VyZmFjZV9jcmVhdGUoaGRjKTsKLSAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9
IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKLQotICAgICAgICBkcmF3aW5nQXJlYS0+cGFpbnQoY29u
dGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOwotCi0gICAgICAgIGNhaXJvX2Rlc3Ry
b3koY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSNl
bHNlCi0gICAgICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFU
ZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCi0gICAg
ICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgICAgICBCYWNraW5nU3RvcmU6OkRYQ29u
bmVjdGlvbnMgY29udGV4dCB7IG1faW1tZWRpYXRlQ29udGV4dC5nZXQoKSwgYmFja0J1ZmZlci5n
ZXQoKSB9OworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9fd2lu
MzJfc3VyZmFjZV9jcmVhdGUoaGRjKTsKKyAgICAgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBj
YWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgCiAgICAgICAgICAgICBkcmF3aW5nQXJlYS0+cGFp
bnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7IAorICAgIAorICAgICAgICAgICAgY2Fp
cm9fZGVzdHJveShjb250ZXh0KTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShz
dXJmYWNlKTsKKyNlbHNlCisgICAgICAgICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNr
QnVmZmVyOyAKKyAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVy
KDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
YmFja0J1ZmZlcikpOyAKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAg
ICAgICAgICAgQmFja2luZ1N0b3JlOjpEWENvbm5lY3Rpb25zIGNvbnRleHQgeyBtX2ltbWVkaWF0
ZUNvbnRleHQuZ2V0KCksIGJhY2tCdWZmZXIuZ2V0KCkgfTsKKyAgICAgICAgICAgICAgICBkcmF3
aW5nQXJlYS0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOworICAg
ICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7
IAogI2VuZGlmCi0KLSAgICAgICAgYXV0byB1bnBhaW50ZWRSZWN0cyA9IHVucGFpbnRlZFJlZ2lv
bi5yZWN0cygpOwotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWN0cykKLSAg
ICAgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgcmVjdCk7Cisg
ICAgCisgICAgICAgICAgICBhdXRvIHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVkUmVnaW9uLnJl
Y3RzKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWN0cykKKyAg
ICAgICAgICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3Qp
OworICAgICAgICB9OworICAgICAgICBzd2l0Y2ggKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+dHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAgICAgICAgICAgIHBh
aW50ZXIoc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eVdDKj4obV9wYWdlLT5kcmF3aW5nQXJl
YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6
OkNvb3JkaW5hdGVkR3JhcGhpY3M6CisgICAgICAgICAgICBwYWludGVyKHN0YXRpY19jYXN0PERy
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4obV9wYWdlLT5kcmF3aW5nQXJlYSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIGRyYXdQ
YWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgZGlydHlSZWN0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKaW5kZXggZGQyZTgwYjY1ZDIzLi4zNTliMGNi
ZGE3NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCkBAIC0zMjEs
NiArMzIxLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIC8vIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlCYXNlIG92ZXJyaWRlcy4KICAgICB2b2lkIHdhaXRVbnRpbEluaXRpYWxpemVk
KCkgZmluYWw7CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFBsYXRmb3JtTGF5ZXJD
b250YWluZXIgY3JlYXRlUGxhdGZvcm1MYXllcigpIGZpbmFsOworI2VuZGlmCiAKICAgICBib29s
IGlzQ29udGV4dExvc3QoKSBjb25zdCB7IHJldHVybiAhbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsg
fQogICAgIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlX
Qy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi45MDVkNDMwNTgyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlX
Qy5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyR0NHTC5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGxhdGZvcm1MYXllckNvbnRhaW5lciBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVQbGF0Zm9ybUxheWVyKCkKK3sKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXQ1BsYXRmb3JtTGF5ZXJHQ0dMPihtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzNzFkZDk4ODgzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdl
JiBwYWdlLCBDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQoreworfQorCitSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6flJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVk
KCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJmNvbnN0X2Nhc3Q8
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkmPigqdGhpcykuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK0dQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAg
IGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikgeworICAgICAgICBhdXRvJiBncHVQcm9jZXNz
Q29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25u
ZWN0aW9uKCk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7
CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCks
ICp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQo
CisgICAgICAgICAgICBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRl
V0NMYXllclRyZWVIb3N0KHdjTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIoKSwgbV9wYWdlLm5hdGl2
ZVdpbmRvd0hhbmRsZSgpKSwKKyAgICAgICAgICAgIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAgICAgbV9ncHVQcm9j
ZXNzQ29ubmVjdGlvbiA9IGdwdVByb2Nlc3NDb25uZWN0aW9uOworICAgIH0KKyAgICByZXR1cm4g
Km1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6OmRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKQoreworICAgIGlmIChhdXRvIGdw
dVByb2Nlc3NDb25uZWN0aW9uID0gc3RkOjpleGNoYW5nZShtX2dwdVByb2Nlc3NDb25uZWN0aW9u
LCBudWxscHRyKSkgeworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1h
cCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigp
LnRvVUludDY0KCkpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VXQ0xheWVy
VHJlZUhvc3Qod2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpKSwgMCwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIH0KK30K
Kwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25E
aWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYgcHJldmlvdXNDb25uZWN0aW9uKQoreworICAg
IHByZXZpb3VzQ29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgIG1fZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJl
dHVybiB3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlSW5m
bykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZSh1
cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmRpZFVw
ZGF0ZSgpCit7CisgICAgbV9jbGllbnQuZGlkVXBkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9S
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNzc4ZDhjYjBhMjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5o
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdHJ1Y3QgV0NVcGF0ZUluZm87CisKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk7CitwdWJsaWM6CisgICAgY2xh
c3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUo
KSA9IDA7CisgICAgfTsKKworICAgIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KFdlYlBhZ2Um
LCBDbGllbnQmKTsKKyAgICB+UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkoKTsKKworICAgIHZv
aWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYpOworCisgICAgdm9pZCBkaWRVcGRhdGUoKTsKKworcHJp
dmF0ZToKKyAgICBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIHdjTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3djTGF5ZXJUcmVlSG9zdElkZW50aWZpZXI7IH07Cisg
ICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7Cisg
ICAgdm9pZCBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7CisKKyAgICAvLyBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENs
b3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikgZmluYWw7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICBJ
UEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFdlYWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb247CisgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBtX3djTGF5ZXJUcmVlSG9zdElk
ZW50aWZpZXIgeyBXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAg
V2ViUGFnZSYgbV9wYWdlOworICAgIENsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGY4YWY3N2EzMTE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQorCittZXNzYWdlcyAtPiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSBOb3RS
ZWZDb3VudGVkIHsKKyAgICBEaWRVcGRhdGUoKQorfQorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy93Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBkYmEwNWUxNTVmOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NMYXll
clRyZWVIb3N0SWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXJUeXBlPjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dD
UGxhdGZvcm1MYXllckdDR0wuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uYTg3ZTA4ZTgyZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvV0NQbGF0Zm9y
bUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXJH
Q0dMIDogcHVibGljIFdlYkNvcmU6OldDUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgV0NQ
bGF0Zm9ybUxheWVyR0NHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgaWRlbnRpZmllcikK
KyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcihpZGVudGlmaWVyKQorICAg
IHsKKyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJiBncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCmluZGV4IGE1
MzQ0MDdkMDM2Ni4uZDFkMmRiOGMwZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCkBAIC00MCw2ICs0MCw5IEBACiAjZWxpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJE
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKICNlbmRpZgorI2lmIFVTRShHUkFQSElD
U19MQVlFUl9XQykKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU3LDYgKzYwLDEwIEBA
IHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYT4gRHJhd2luZ0FyZWE6OmNyZWF0ZShXZWJQYWdl
JiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
IHx8IFVTRShURVhUVVJFX01BUFBFUikKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6Q29vcmRp
bmF0ZWRHcmFwaGljczoKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFDb29y
ZGluYXRlZEdyYXBoaWNzPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKKyNlbmRpZgorI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKyAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6V0M6CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPERyYXdpbmdBcmVhV0M+KHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwog
I2VuZGlmCiAgICAgfQogCkBAIC0xMDgsNiArMTE1LDEwIEBAIGJvb2wgRHJhd2luZ0FyZWE6OnN1
cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyhEcmF3aW5nQXJlYVR5cGUgdHlwZSkKICNlbGlmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGNhc2Ug
RHJhd2luZ0FyZWFUeXBlOjpDb29yZGluYXRlZEdyYXBoaWNzOgogICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgY2FzZSBEcmF3aW5n
QXJlYVR5cGU6OldDOgorICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDVlMGI5NzU5YzZjYy4uMjlkOTlhYWY5NTJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTEz
Niw2ICsxMzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgYm9vbCBmbHVzaFN5bmNocm9ub3VzbHks
IGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgZmVuY2VQb3J0KSB7IH0KICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeSh1
aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkgeyB9OworI2VuZGlmCisKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKSB7IH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5t
ZXNzYWdlcy5pbgppbmRleCA5ZDVmNmRjYTZlMzguLmIxOTZhOWYwNWQyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW4KQEAgLTQwLDYgKzQwLDEwIEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhIE5vdFJlZkNv
dW50ZWQgewogICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIFVw
ZGF0ZUdlb21ldHJ5KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYkNvcmU6OkludFNp
emUgdmlld1NpemUpCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShH
VEspCiAgICAgQWRqdXN0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0
UG9pbnQgb3JpZ2luKQogICAgIENvbW1pdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJD
b3JlOjpGbG9hdFBvaW50IG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi4yNjJmNzQ3Njc1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApAQCAtMCwwICsx
LDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RHJhd2luZ0FyZWFXQy5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eS5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKFdlYlBh
Z2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CisgICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGU6OldDLCBwYXJhbWV0ZXJzLmRyYXdp
bmdBcmVhSWRlbnRpZmllciwgd2ViUGFnZSkKKyAgICAsIG1fcm9vdExheWVyQ2xpZW50KHdlYlBh
Z2UpCisgICAgLCBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KG1ha2VVbmlxdWU8UmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk+KHdlYlBhZ2UsICp0aGlzKSkKKyAgICAsIG1fbGF5ZXJGYWN0
b3J5KCp0aGlzKQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMtPm1fcm9vdExheWVyQ2xpZW50KSkKKyAgICAsIG1fdXBk
YXRlUmVuZGVyaW5nVGltZXIoKnRoaXMsICZEcmF3aW5nQXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcp
CisgICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJEcmF3aW5nQXJlYVdDIENv
bW1pdFF1ZXVlIl9zKSkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZShNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiZHJhd2luZyBhcmVhIHJvb3QiKSk7CisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1
ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNpemUoKSk7CisgICAgbV9y
b290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCitEcmF3aW5nQXJlYVdDOjp+RHJhd2lu
Z0FyZWFXQygpCit7CisgICAgd2hpbGUgKGF1dG8gbGF5ZXIgPSBtX2xpdmVHcmFwaGljc0xheWVy
cy5yZW1vdmVIZWFkKCkpCisgICAgICAgIGxheWVyLT5jbGVhck9ic2VydmVyKCk7Cit9CisKK0dy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBEcmF3aW5nQXJlYVdDOjpncmFwaGljc0xheWVyRmFjdG9yeSgp
Cit7CisgICAgcmV0dXJuICZtX2xheWVyRmFjdG9yeTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
Ojp1cGRhdGVSb290TGF5ZXJzKCkKK3sKKyAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBj
aGlsZHJlbjsKKyAgICBpZiAobV9jb250ZW50TGF5ZXIpIHsKKyAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKCptX2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVy
KQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCptX3ZpZXdPdmVybGF5Um9vdExheWVyKTsK
KyAgICB9CisgICAgbV9yb290TGF5ZXItPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsK
KyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogcm9vdExheWVyKQoreworICAg
IG1fY29udGVudExheWVyID0gcm9vdExheWVyOworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30K
Kwordm9pZCBEcmF3aW5nQXJlYVdDOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IGxheWVy
OworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRM
YXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCit7CisgICAgaWYgKG1faXNSZW5k
ZXJpbmdTdXNwZW5kZWQgPT0gaXNGcm96ZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzUmVu
ZGVyaW5nU3VzcGVuZGVkID0gaXNGcm96ZW47CisgICAgaWYgKCFtX2lzUmVuZGVyaW5nU3VzcGVu
ZGVkICYmIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZl
cnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZhbHNlOworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBk
YXRlKCk7CisgICAgfQorfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnVwZGF0ZUdlb21ldHJ5KHVp
bnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIEludFNpemUgdmlld1NpemUpCit7CisgICAgbV9i
YWNraW5nU3RvcmVTdGF0ZUlEID0gYmFja2luZ1N0b3JlU3RhdGVJRDsKKyAgICBtX3dlYlBhZ2Uu
c2V0U2l6ZSh2aWV3U2l6ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNp
emUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAg
ICBtX2RpcnR5UmVnaW9uID0geyB9OworICAgIG1fc2Nyb2xsUmVjdCA9IHsgfTsKKyAgICBtX3Nj
cm9sbE9mZnNldCA9IHsgfTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV93ZWJQYWdlLmJv
dW5kcygpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoaXNDb21wb3NpdGluZ01vZGUoKSkKKyAg
ICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBlbHNl
CisgICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUocmVjdCk7CisgICAgdHJpZ2dlclJlbmRlcmlu
Z1VwZGF0ZSgpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNjcm9sbChjb25zdCBJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAoaXND
b21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChzY3JvbGxSZWN0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHNjcm9sbFJlY3QgIT0g
bV9zY3JvbGxSZWN0KSB7CisgICAgICAgICAgICAvLyBKdXN0IHJlcGFpbnQgdGhlIGVudGlyZSBj
dXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBzY3JvbGwgdGhlIG5ldyByZWN0IGluc3RlYWQuCisg
ICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV9zY3JvbGxSZWN0KTsKKyAgICAgICAg
ICAgIG1fc2Nyb2xsUmVjdCA9IHsgfTsKKyAgICAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0geyB9
OworICAgICAgICB9CisgICAgICAgIC8vIEdldCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVnaW9u
IHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0LgorICAgICAgICBSZWdpb24gZGlydHlSZWdpb25J
blNjcm9sbFJlY3QgPSBpbnRlcnNlY3Qoc2Nyb2xsUmVjdCwgbV9kaXJ0eVJlZ2lvbik7CisgICAg
ICAgIGlmICghZGlydHlSZWdpb25JblNjcm9sbFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGFyZSBpbnNpZGUg
dGhlIHNjcm9sbCByZWN0LgorICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdWJ0cmFjdCB0aGVt
IGZyb20gdGhlIHJlZ2lvbiwgbW92ZSB0aGVtIGFuZCByZS1hZGQgdGhlbS4KKyAgICAgICAgICAg
IG1fZGlydHlSZWdpb24uc3VidHJhY3Qoc2Nyb2xsUmVjdCk7CisgICAgICAgICAgICAvLyBNb3Zl
IHRoZSBkaXJ0eSBwYXJ0cy4KKyAgICAgICAgICAgIFJlZ2lvbiBtb3ZlZERpcnR5UmVnaW9uSW5T
Y3JvbGxSZWN0ID0gaW50ZXJzZWN0KHRyYW5zbGF0ZShkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCwg
c2Nyb2xsRGVsdGEpLCBzY3JvbGxSZWN0KTsKKyAgICAgICAgICAgIC8vIEFuZCBhZGQgdGhlbSBi
YWNrLgorICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5T
Y3JvbGxSZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb21wdXRlIHRoZSBzY3JvbGwgcmVw
YWludCByZWdpb24uCisgICAgICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJh
Y3Qoc2Nyb2xsUmVjdCwgdHJhbnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7CisgICAg
ICAgIG1fZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CisgICAgICAgIG1f
c2Nyb2xsUmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9s
bERlbHRhOworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgfQorfQorCit2
b2lkIERyYXdpbmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKQoreworICAgIGlmICht
X2lzUmVuZGVyaW5nU3VzcGVuZGVkIHx8IG1fd2FpdERpZFVwZGF0ZSkgeworICAgICAgICBtX2hh
c0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobV91cGRhdGVSZW5kZXJpbmdUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgbV91cGRhdGVSZW5kZXJpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwor
c3RhdGljIHZvaWQgZmx1c2hMYXllckltYWdlQnVmZmVycyhXQ1VwYXRlSW5mbyYgaW5mbykKK3sK
KyAgICBmb3IgKGF1dG8mIGxheWVySW5mbyA6IGluZm8uY2hhbmdlZExheWVycykgeworICAgICAg
ICBpZiAobGF5ZXJJbmZvLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gbGF5ZXJJbmZvLmJhY2tpbmdTdG9yZS5pbWFn
ZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gZmx1c2hlciA9IGltYWdlLT5j
cmVhdGVGbHVzaGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRHJhd2luZ0FyZWFXQzo6
aXNDb21wb3NpdGluZ01vZGUoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRMYXllcjsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVSZW5kZXJpbmcoKQoreworICAgIGlmIChtX2lzUmVu
ZGVyaW5nU3VzcGVuZGVkKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUg
PSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBub3QgcmVlbnRyYW50LCBlLmcuIGEgckFGIGNhbGxiYWNrIG1heSBmb3JjZSByZXBhaW50Lgor
ICAgIGlmIChtX2luVXBkYXRlUmVuZGVyaW5nKQorICAgICAgICByZXR1cm47CisgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gY2hhbmdlKG1faW5VcGRhdGVSZW5kZXJpbmcsIHRydWUpOworCisgICAgQVNT
RVJUKCFtX3dhaXREaWRVcGRhdGUpOworICAgIG1fd2FpdERpZFVwZGF0ZSA9IHRydWU7CisKKyAg
ICBtX3dlYlBhZ2UudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgbV93ZWJQYWdlLmZsdXNoUGVuZGlu
Z0VkaXRvclN0YXRlVXBkYXRlKCk7CisKKyAgICBPcHRpb25TZXQ8RmluYWxpemVSZW5kZXJpbmdV
cGRhdGVGbGFncz4gZmxhZ3M7CisgICAgbV93ZWJQYWdlLmZpbmFsaXplUmVuZGVyaW5nVXBkYXRl
KGZsYWdzKTsKKyAgICBtX3dlYlBhZ2UuZGlkVXBkYXRlUmVuZGVyaW5nKCk7CisKKyAgICBpZiAo
aXNDb21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgc2VuZFVwZGF0ZUFDKCk7CisgICAgZWxzZQor
ICAgICAgICBzZW5kVXBkYXRlTm9uQUMoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZW5k
VXBkYXRlQUMoKQoreworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJs
YXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNz
TGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlKHsgfSk7CisKKyAgICBtX3VwZGF0ZUluZm8ucm9vdExheWVyID0gbV9y
b290TGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVlLT5kaXNwYXRj
aChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgdXBkYXRlSW5mbyA9IHN0ZDo6ZXhj
aGFuZ2UobV91cGRhdGVJbmZvLCB7IH0pXSgpIG11dGFibGUgeworICAgICAgICBmbHVzaExheWVy
SW1hZ2VCdWZmZXJzKHVwZGF0ZUluZm8pOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHVwZGF0ZUluZm8gPSBXVEZN
b3ZlKHVwZGF0ZUluZm8pXSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5LT51cGRhdGUoV1RGTW92ZSh1cGRhdGVJbmZvKSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRQYWludEJvdW5kc1JlY3QoY29uc3QgSW50UmVj
dCYgYm91bmRzLCBjb25zdCBWZWN0b3I8SW50UmVjdCwgMT4mIHJlY3RzKQoreworICAgIGNvbnN0
IHNpemVfdCByZWN0VGhyZXNob2xkID0gMTA7CisgICAgY29uc3QgZG91YmxlIHdhc3RlZFNwYWNl
VGhyZXNob2xkID0gMC43NTsKKworICAgIGlmIChyZWN0cy5zaXplKCkgPD0gMSB8fCByZWN0cy5z
aXplKCkgPiByZWN0VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBdHRl
bXB0IHRvIGd1ZXNzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHJlZ2lvbiBib3Vu
ZHMgcmVjdCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNv
bXB1dGluZyB0aGUgcGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgYm91bmRzLiBJ
ZiB0aGF0IHdhc3RlZCBzcGFjZQorICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRv
IGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgIHVuc2lnbmVkIGJvdW5kc0Fy
ZWEgPSBib3VuZHMud2lkdGgoKSAqIGJvdW5kcy5oZWlnaHQoKTsKKyAgICB1bnNpZ25lZCByZWN0
c0FyZWEgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlY3RzQXJlYSArPSByZWN0c1tpXS53aWR0aCgpICogcmVjdHNbaV0uaGVpZ2h0
KCk7CisKKyAgICBkb3VibGUgd2FzdGVkU3BhY2UgPSAxIC0gKHN0YXRpY19jYXN0PGRvdWJsZT4o
cmVjdHNBcmVhKSAvIGJvdW5kc0FyZWEpOworICAgIHJldHVybiB3YXN0ZWRTcGFjZSA8PSB3YXN0
ZWRTcGFjZVRocmVzaG9sZDsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZW5kVXBkYXRlTm9u
QUMoKQoreworICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSkgeworICAgICAgICBkaWRV
cGRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0IGJvdW5kcyA9IG1f
ZGlydHlSZWdpb24uYm91bmRzKCk7CisgICAgQVNTRVJUKG1fd2ViUGFnZS5ib3VuZHMoKS5jb250
YWlucyhib3VuZHMpKTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemUgPSBib3VuZHMuc2l6ZSgpOwor
ICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgYml0bWFwU2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7
CisKKyAgICBhdXRvIGltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXIoYml0bWFwU2l6ZSk7CisgICAg
YXV0byByZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKKyAgICBpZiAoc2hvdWxkUGFpbnRC
b3VuZHNSZWN0KGJvdW5kcywgcmVjdHMpKSB7CisgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAg
ICAgIHJlY3RzLmFwcGVuZChib3VuZHMpOworICAgIH0KKyAgICBtX2RpcnR5UmVnaW9uID0geyB9
OworCisgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIHVwZGF0ZUluZm8udmlld1NpemUg
PSBtX3dlYlBhZ2Uuc2l6ZSgpOworICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0b3IgPSBt
X3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cyA9
IHJlY3RzOworICAgIHVwZGF0ZUluZm8uc2Nyb2xsUmVjdCA9IG1fc2Nyb2xsUmVjdDsKKyAgICB1
cGRhdGVJbmZvLnNjcm9sbE9mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OworICAgIG1fc2Nyb2xsUmVj
dCA9IHsgfTsKKyAgICBtX3Njcm9sbE9mZnNldCA9IHsgfTsKKworICAgIGF1dG8mIGdyYXBoaWNz
Q29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoLWJvdW5kcy54KCksIC1ib3VuZHMueSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlY3QgOiByZWN0cykKKyAgICAgICAgbV93ZWJQYWdlLmRyYXdSZWN0KGltYWdlLT5jb250ZXh0
KCksIHJlY3QpOworICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKworICAg
IG1fY29tbWl0UXVldWUtPmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMp
LCBzdGF0ZUlEID0gbV9iYWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1
cGRhdGVJbmZvKSwgaW1hZ2VdKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChhdXRvIGZsdXNoZXIg
PSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQorICAgICAgICAgICAgZmx1c2hlci0+Zmx1c2goKTsK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpLCBzdGF0ZUlELCB1cGRhdGVJbmZvID0gV1RGTW92ZSh1cGRhdGVJbmZvKSwg
aW1hZ2VdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChzdGF0ZUlEICE9IG1fYmFja2luZ1N0b3Jl
U3RhdGVJRCkgeworICAgICAgICAgICAgICAgIGRpZFVwZGF0ZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gc3RhdGlj
X2Nhc3Q8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCY+KCppbWFnZS0+
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCk7
CisgICAgICAgICAgICB1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSA9IHN0ZDo6Z2V0PFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlPihXVEZNb3ZlKGhhbmRsZSkpOworICAgICAgICAgICAgc2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlKHN0YXRlSUQsIFdURk1vdmUodXBkYXRlSW5m
bykpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3Jh
cGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYgbGF5ZXIpCit7CisgICAgbV9saXZlR3Jh
cGhpY3NMYXllcnMuYXBwZW5kKCZsYXllcik7CisgICAgbV91cGRhdGVJbmZvLmFkZGVkTGF5ZXJz
LmFwcGVuZChsYXllci5wcmltYXJ5TGF5ZXJJRCgpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdD
OjpncmFwaGljc0xheWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmIGxheWVyKQoreworICAgIG1f
bGl2ZUdyYXBoaWNzTGF5ZXJzLnJlbW92ZSgmbGF5ZXIpOworICAgIG1fdXBkYXRlSW5mby5yZW1v
dmVkTGF5ZXJzLmFwcGVuZChsYXllci5wcmltYXJ5TGF5ZXJJRCgpKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVdDOjpjb21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYgaW5mbykK
K3sKKyAgICBtX3VwZGF0ZUluZm8uY2hhbmdlZExheWVycy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7
Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gRHJhd2luZ0FyZWFXQzo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoRmxvYXRTaXplIHNpemUpCit7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNo
b3VsZFVzZVJlbW90ZVJlbmRlcmluZ0ZvcihSZW5kZXJpbmdQdXJwb3NlOjpET00pKQorICAgICAg
ICByZXR1cm4gbV93ZWJQYWdlLmVuc3VyZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpLmNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIHJl
dHVybiBDb25jcmV0ZUltYWdlQnVmZmVyPFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQ+OjpjcmVhdGUoc2l6ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCks
IFBpeGVsRm9ybWF0OjpCR1JBOCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6
ZGlkVXBkYXRlKCkKK3sKKyAgICBtX3dhaXREaWRVcGRhdGUgPSBmYWxzZTsKKyAgICBpZiAobV9o
YXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSkgeworICAgICAgICBtX2hhc0RlZmVycmVkUmVuZGVy
aW5nVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAg
ICB9Cit9CisKK0RyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50
KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKK30KKwordm9p
ZCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpCit7CisgICAgY29udGV4dC5z
YXZlKCk7CisgICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3RUb1BhaW50KSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Zsb2F0IERy
YXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44NzIxNzJkZjJiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKQEAgLTAsMCArMSwx
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEcmF3aW5n
QXJlYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgIlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
aW1lci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFXQyBmaW5h
bAorICAgIDogcHVibGljIERyYXdpbmdBcmVhCisgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllcldD
OjpPYnNlcnZlcgorICAgICwgcHVibGljIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpDbGll
bnQgeworcHVibGljOgorICAgIERyYXdpbmdBcmVhV0MoV2ViUGFnZSYsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKTsKKyAgICB+RHJhd2luZ0FyZWFXQygpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZm9yY2VSZXBhaW50QXN5bmMoV2ViUGFnZSYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0cmlnZ2Vy
UmVuZGVyaW5nVXBkYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0
dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIG92ZXJyaWRlIHsgfQorICAg
IHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOworICAgIGJvb2wg
bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNSZW5k
ZXJpbmdTdXNwZW5kZWQ7IH0KKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2NF90LCBXZWJD
b3JlOjpJbnRTaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Cisg
ICAgLy8gR3JhcGhpY3NMYXllcldDOjpPYnNlcnZlcgorICAgIHZvaWQgZ3JhcGhpY3NMYXllckFk
ZGVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhcGhpY3NMYXllclJl
bW92ZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21taXRMYXllclVw
YXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplKSBvdmVy
cmlkZTsKKyAgICAvLyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50CisgICAgdm9p
ZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNDb21wb3NpdGluZ01vZGUoKTsK
KyAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZygpOworICAgIHZvaWQgc2VuZFVwZGF0ZUFDKCk7Cisg
ICAgdm9pZCBzZW5kVXBkYXRlTm9uQUMoKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsK
KworICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJvb3RMYXllckNsaWVudChXZWJQYWdl
Jik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRC
ZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKyAgICB9OworCisgICAg
Um9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eT4gbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTsK
KyAgICBXQ0xheWVyRmFjdG9yeSBtX2xheWVyRmFjdG9yeTsKKyAgICBEb3VibHlMaW5rZWRMaXN0
PEdyYXBoaWNzTGF5ZXJXQz4gbV9saXZlR3JhcGhpY3NMYXllcnM7CisgICAgV2ViQ29yZTo6VGlt
ZXIgbV91cGRhdGVSZW5kZXJpbmdUaW1lcjsKKyAgICBib29sIG1faXNSZW5kZXJpbmdTdXNwZW5k
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2luVXBkYXRlUmVuZGVyaW5nIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fd2FpdERpZFVwZGF0ZSB7IGZhbHNlIH07CisgICAgV0NVcGF0ZUluZm8gbV91cGRhdGVJbmZv
OworICAgIFJlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgUmVmPFdv
cmtRdWV1ZT4gbV9jb21taXRRdWV1ZTsKKyAgICBpbnQ2NF90IG1fYmFja2luZ1N0b3JlU3RhdGVJ
RCB7IDAgfTsKKyAgICBXZWJDb3JlOjpSZWdpb24gbV9kaXJ0eVJlZ2lvbjsKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1fc2Nyb2xsUmVjdDsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zm
c2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ0MTcyNGRjNzkxYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5jcHAKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJXQy5oIgorCisjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyR0NHTC5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcmFwaGljc0xheWVyV0M6
OkdyYXBoaWNzTGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xp
ZW50LCBPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwg
Y2xpZW50KQorICAgICwgbV9vYnNlcnZlcigmb2JzZXJ2ZXIpCit7CisgICAgbV9vYnNlcnZlci0+
Z3JhcGhpY3NMYXllckFkZGVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllcldDOjp+R3JhcGhp
Y3NMYXllcldDKCkKK3sKKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKKyAgICBpZiAobV9vYnNlcnZl
cikKKyAgICAgICAgbV9vYnNlcnZlci0+Z3JhcGhpY3NMYXllclJlbW92ZWQoKnRoaXMpOworfQor
CitHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhpY3NMYXllcldDOjpnZW5lcmF0
ZUxheWVySUQoKQoreworICAgIC8vIDAgYW5kIG1heCBjYW4ndCBiZSB1c2VkIGZvciBoYXNoIGtl
eXMKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkID0gMTsKKyAg
ICByZXR1cm4gaWQrKzsKK30KKworR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdyYXBo
aWNzTGF5ZXJXQzo6cHJpbWFyeUxheWVySUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
SUQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAg
IGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBhaW50
UmVjdCh7IHsgfSwgbV9zaXplIH0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdWxkQ2xp
cFRvTGF5ZXIpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUp
OworICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIC8vIEZvciBleGFtcGxlLCBpZiBXZWJH
TCBjYW52YXMgY2hhbmdlZCwgaXQgbmVlZHMgZmx1c2ggdG8gZGlzcGxheS4KKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoeyB9KTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldENo
aWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4pCit7CisgICAgYm9v
bCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihXVEZNb3ZlKGNo
aWxkcmVuKSk7CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICByZXR1cm4gY2hpbGRy
ZW5DaGFuZ2VkOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQoUmVmPEdyYXBo
aWNzTGF5ZXI+JiYgY2hpbGRMYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChX
VEZNb3ZlKGNoaWxkTGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXll
ckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRB
dEluZGV4KFJlZjxHcmFwaGljc0xheWVyPiYmIGNoaWxkTGF5ZXIsIGludCBpbmRleCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoV1RGTW92ZShjaGlsZExheWVyKSwgaW5k
ZXgpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJl
bik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjphZGRDaGlsZEJlbG93KFJlZjxHcmFwaGlj
c0xheWVyPiYmIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhXVEZNb3ZlKGNoaWxkTGF5ZXIpLCBzaWJsaW5nKTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZShSZWY8R3JhcGhpY3NMYXll
cj4mJiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoV1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwor
Ym9vbCBHcmFwaGljc0xheWVyV0M6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGls
ZCwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5
ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgV1RGTW92ZShuZXdDaGlsZCkpKSB7CisgICAgICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAobV9wYXJlbnQpCisg
ICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KG1fcGFyZW50KS0+bm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKKyAgICBHcmFwaGljc0xh
eWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRN
YXNrTGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7CisgICAgaWYgKGxheWVy
ID09IG1fbWFza0xheWVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
TWFza0xheWVyKFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
V0NMYXllckNoYW5nZTo6TWFza0xheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNl
dFJlcGxpY2F0ZWRMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIg
PT0gbV9yZXBsaWNhdGVkTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRSZXBsaWNhdGVkTGF5ZXIobGF5ZXIpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNzTGF5ZXI+JiYgbGF5ZXIpCit7
CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoV1RGTW92ZShsYXllcikpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgaWYgKHBvaW50ID09IG1fcG9zaXRpb24pCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit7Cisg
ICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwb2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmIChzaXplID09IG1f
c2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJvdW5kc09yaWdpbihjb25zdCBGbG9hdFBv
aW50JiBvcmlnaW4pCit7CisgICAgaWYgKG9yaWdpbiA9PSBtX2JvdW5kc09yaWdpbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJvdW5kc09yaWdpbihvcmlnaW4pOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllcldDOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdCkKK3sKKyAgICBpZiAodCA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQorICAgICAgICByZXR1
cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlByZXNlcnZlczNEKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gbWFza3NUb0JvdW5kcygpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0TWFza3NUb0JvdW5kcyh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
c2V0T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7Cisg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzUmVjdCgpKQorICAgICAgICByZXR1
cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHZhbHVlKTsKKyAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0NsaXBwaW5n
UmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHND
bGlwcGluZ1JlY3QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldD
OjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3ND
b250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0Nv
bnRlbnQodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNraW5nU3RvcmUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNW
aXNpYmxlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzQXJlVmlzaWJs
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNp
YmxlKHZhbHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6
Q29udGVudHNWaXNpYmxlKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2li
aWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eSh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJD
aGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNv
bG9yID09IG1fc29saWRDb2xvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc29saWRDb2xvciA9
IGNvbG9yOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpTb2xp
ZENvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVG9QbGF0Zm9y
bUxheWVyKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIENvbnRlbnRzTGF5ZXJQdXJwb3Nl
KQoreworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxhdGZvcm1MYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJXQzo6dXNlc0NvbnRlbnRzTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsYXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaG93
RGVidWdCb3JkZXIoYm9vbCBzaG93KQoreworICAgIGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigp
ID09IHNob3cpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93RGVi
dWdCb3JkZXIoc2hvdyk7CisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHdpZHRoKQoreworICAgIG1fZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgIG1fZGVi
dWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBpZiAoaXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKSA9PSBzaG93KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAg
aWYgKCFmaWx0ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29u
c3QgYXV0byYgZmlsdGVyT3BlcmF0aW9uIDogZmlsdGVycy5vcGVyYXRpb25zKCkpIHsKKyAgICAg
ICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJF
TkNFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworICAgIGlmIChHcmFwaGljc0xheWVyOjpmaWx0ZXJz
KCkgPT0gZmlsdGVycykKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CisKKyAg
ICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykgeworICAgICAgICBpZiAoIUdyYXBoaWNzTGF5ZXI6
OnNldEZpbHRlcnMoZmlsdGVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBl
bHNlIGlmIChHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCkuc2l6ZSgpKQorICAgICAgICBjbGVhckZp
bHRlcnMoKTsKKworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpG
aWx0ZXJzKTsKKyAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKK30KKworYm9vbCBHcmFw
aGljc0xheWVyV0M6OnNldEJhY2tkcm9wRmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQoreworICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IGZpbHRlcnNDYW5CZUNv
bXBvc2l0ZWQoZmlsdGVycyk7CisgICAgaWYgKG1fYmFja2Ryb3BGaWx0ZXJzID09IGZpbHRlcnMp
CisgICAgICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworICAgIGlmIChjYW5Db21wb3Np
dGVGaWx0ZXJzKQorICAgICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnMoZmls
dGVycyk7CisgICAgZWxzZQorICAgICAgICBjbGVhckJhY2tkcm9wRmlsdGVycygpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpOwor
ICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBiYWNrZHJv
cEZpbHRlcnNSZWN0KQoreworICAgIGlmIChtX2JhY2tkcm9wRmlsdGVyc1JlY3QgPT0gYmFja2Ry
b3BGaWx0ZXJzUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJh
Y2tkcm9wRmlsdGVyc1JlY3QoYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CisgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5
ZXJDaGFuZ2U+IGZsYWdzKQoreworICAgIGlmIChiZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgYm9vbCBuZWVkc0ZsdXNoID0gIW1fdW5jb21taXR0ZWRDaGFuZ2VzOworICAg
IG1fdW5jb21taXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7CisgICAgaWYgKG5lZWRzRmx1c2gpCisg
ICAgICAgIGNsaWVudCgpLm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIG1hc2stPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoYXV0byogcmVw
bGljYSA9IHJlcGxpY2FMYXllcigpKQorICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAg
ICBjaGlsZC0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAg
aWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworICAgIFdDTGF5ZXJV
cGF0ZUluZm8gdXBkYXRlOworICAgIHVwZGF0ZS5pZCA9IHByaW1hcnlMYXllcklEKCk7CisgICAg
dXBkYXRlLmNoYW5nZXMgPSBzdGQ6OmV4Y2hhbmdlKG1fdW5jb21taXR0ZWRDaGFuZ2VzLCB7IH0p
OworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7Cisg
ICAgICAgIHVwZGF0ZS5jaGlsZHJlbiA9IFdURjo6bWFwKGNoaWxkcmVuKCksIFtdKGF1dG8mIGxh
eWVyKSB7CisgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnByaW1hcnlMYXllcklEKCk7CisgICAg
ICAgIH0pOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpN
YXNrTGF5ZXIpIHsKKyAgICAgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICAgICAgdXBkYXRl
Lm1hc2tMYXllciA9IG1hc2tMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB1cGRhdGUubWFza0xheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAg
ICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBsaWNhTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlLnJlcGxpY2FMYXll
ciA9IHJlcGxpY2FMYXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB1cGRhdGUucmVwbGljYUxheWVyID0gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICBp
ZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICB1
cGRhdGUucG9zaXRpb24gPSBwb3NpdGlvbigpOworICAgICAgICB1cGRhdGUuYW5jaG9yUG9pbnQg
PSBhbmNob3JQb2ludCgpOworICAgICAgICB1cGRhdGUuc2l6ZSA9IHNpemUoKTsKKyAgICAgICAg
dXBkYXRlLmJvdW5kc09yaWdpbiA9IGJvdW5kc09yaWdpbigpOworICAgIH0KKyAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkKKyAgICAgICAgdXBkYXRl
LnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1JlY3Qg
PSBjb250ZW50c1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgdXBkYXRlLmNvbnRlbnRzQ2xpcHBpbmdS
ZWN0ID0gY29udGVudHNDbGlwcGluZ1JlY3QoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c1Zp
c2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgIHVwZGF0ZS5iYWNrZmFj
ZVZpc2liaWxpdHkgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICB1cGRhdGUubWFza3NU
b0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpICYm
IGNvbnRlbnRzQXJlVmlzaWJsZSgpICYmICFzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBhdXRvIGltYWdlID0gbV9vYnNlcnZlci0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSgpKTsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IHsgeyB9LCBzaXplKCkgfTsKKyAgICAgICAg
ICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGltYWdlLT5jb250ZXh0KCksIGNsaXBSZWN0
KTsKKyAgICAgICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKyAgICAg
ICAgICAgIHVwZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkp
OworCisgICAgICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAgICAgICAgICAgIHVw
ZGF0ZS5jaGFuZ2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworICAgICAgICB9
CisgICAgfQorICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29s
b3IpCisgICAgICAgIHVwZGF0ZS5zb2xpZENvbG9yID0gbV9zb2xpZENvbG9yOworICAgIGlmICh1
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkRlYnVnVmlzdWFscykgeworICAgICAgICB1
cGRhdGUuc2hvd0RlYnVnQm9yZGVyID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKKyAgICAgICAg
dXBkYXRlLmRlYnVnQm9yZGVyQ29sb3IgPSBtX2RlYnVnQm9yZGVyQ29sb3I7CisgICAgICAgIHVw
ZGF0ZS5kZWJ1Z0JvcmRlcldpZHRoID0gbV9kZWJ1Z0JvcmRlcldpZHRoOworICAgIH0KKyAgICBp
ZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAg
ICAgdXBkYXRlLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7
CisgICAgICAgIHVwZGF0ZS5yZXBhaW50Q291bnQgPSByZXBhaW50Q291bnQoKTsKKyAgICB9Cisg
ICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKKyAgICAgICAg
dXBkYXRlLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICB1cGRhdGUudHJhbnNmb3JtID0gdHJhbnNm
b3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW5U
cmFuc2Zvcm0pCisgICAgICAgIHVwZGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJh
bnNmb3JtKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVy
cykKKyAgICAgICAgdXBkYXRlLmZpbHRlcnMgPSBmaWx0ZXJzKCk7CisgICAgaWYgKHVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAgICAgIHVwZGF0
ZS5iYWNrZHJvcEZpbHRlcnMgPSBiYWNrZHJvcEZpbHRlcnMoKTsKKyAgICAgICAgdXBkYXRlLmJh
Y2tkcm9wRmlsdGVyc1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7CisgICAgfQorICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0
Zm9ybUxheWVyKS0+Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciA9IDA7CisgICAgfQorICAgIG1fb2JzZXJ2ZXItPmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1v
dmUodXBkYXRlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFiNWVjNDcwOTExMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5
ZXJXQy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV0NVcGF0ZUluZm8u
aCIKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgR3JhcGhpY3NMYXllcldDIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIsIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxHcmFwaGljc0xheWVyV0M+IHsK
K3B1YmxpYzoKKyAgICBzdHJ1Y3QgT2JzZXJ2ZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgZ3Jh
cGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNzTGF5ZXJXQyYpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdExheWVyVXBhdGVJbmZvKFdDTGF5ZXJVcGF0ZUluZm8mJikgPSAw
OworICAgICAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplKSA9IDA7CisgICAgfTsKKworICAgIEdyYXBoaWNz
TGF5ZXJXQyhUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYsIE9i
c2VydmVyJik7CisgICAgfkdyYXBoaWNzTGF5ZXJXQygpIG92ZXJyaWRlOworCisgICAgdm9pZCBj
bGVhck9ic2VydmVyKCkgeyBtX29ic2VydmVyID0gbnVsbHB0cjsgfQorCisgICAgLy8gR3JhcGhp
Y3NMYXllcgorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBwcmlt
YXJ5TGF5ZXJJRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29u
dGVudHNOZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICBib29sIHNldENoaWxkcmVuKFZlY3Rv
cjxSZWY8R3JhcGhpY3NMYXllcj4+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVm
PEdyYXBoaWNzTGF5ZXI+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KFJl
ZjxHcmFwaGljc0xheWVyPiYmLCBpbnQgaW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hp
bGRBYm92ZShSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2libGluZykgb3Zl
cnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KFJlZjxHcmFwaGljc0xheWVyPiYmLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsKKyAgICBib29sIHJlcGxhY2VDaGlsZChHcmFw
aGljc0xheWVyKiBvbGRDaGlsZCwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYgbmV3Q2hpbGQpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
TWFza0xheWVyKFJlZlB0cjxHcmFwaGljc0xheWVyPiYmKTsKKyAgICB2b2lkIHNldFJlcGxpY2F0
ZWRMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihS
ZWZQdHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNpemUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCb3VuZHNPcmln
aW4oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c0Ns
aXBwaW5nUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250
ZW50c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxp
dHkoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNUb1BsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciosIENvbnRlbnRzTGF5ZXJQdXJwb3NlKSBvdmVycmlkZTsK
KyAgICBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdXNlc0NvbnRlbnRzTGF5
ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcihib29sKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwg
ZmxvYXQgd2lkdGgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvd1JlcGFpbnRDb3VudGVyKGJv
b2wpIG92ZXJyaWRlOworICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRCYWNrZHJvcEZpbHRlcnMoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2Ry
b3BGaWx0ZXJzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+KTsKKworICAgIHN0YXRpYyBH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgZ2VuZXJhdGVMYXllcklEKCk7CisKKyAgICBm
cmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxHcmFwaGljc0xheWVyV0M+Owor
CisgICAgR3JhcGhpY3NMYXllcldDKiBtX3ByZXY7CisgICAgR3JhcGhpY3NMYXllcldDKiBtX25l
eHQ7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1fbGF5ZXJJ
RCB7IGdlbmVyYXRlTGF5ZXJJRCgpIH07CisgICAgT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CisgICAg
UGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyIHsgbnVsbHB0ciB9OworICAgIFdlYkNvcmU6
OkNvbG9yIG1fc29saWRDb2xvcjsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2RlYnVnQm9yZGVyQ29s
b3I7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IG1fdW5jb21taXR0ZWRDaGFuZ2VzOwor
ICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
V0NCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dD
QmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4z
NGY1MDAyZjU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQmFja2luZ1N0b3JlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ0JhY2tpbmdTdG9yZSgpIHsgfQorICAgIFdlYkNv
cmU6OkltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldEltYWdlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4mJiBpbWFnZSkgeyBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShpbWFnZSk7IH0KKyAgICBTaGFy
ZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLmdldCgpOyB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBib29sIGhhc0ltYWdlQnVmZmVyID0gbV9pbWFn
ZUJ1ZmZlcjsKKyAgICAgICAgZW5jb2RlciA8PCBoYXNJbWFnZUJ1ZmZlcjsKKyAgICAgICAgaWYg
KGhhc0ltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqbV9pbWFnZUJ1ZmZl
ci0+ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkuY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
KCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NCYWNraW5nU3RvcmUmIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGJvb2wgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaGFzSW1hZ2VCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoaGFzSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0Lm1fYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc3RkOjpnZXQ8U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGU+KGhhbmRsZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZm
ZXI7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjRiNTY2ODdiMmI4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcApAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQ0xheWVy
RmFjdG9yeS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dDTGF5ZXJGYWN0b3J5OjpXQ0xh
eWVyRmFjdG9yeShHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJiBvYnNlcnZlcikKKyAgICA6IG1f
b2JzZXJ2ZXIob2JzZXJ2ZXIpCit7Cit9CisKK1JlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBX
Q0xheWVyRmFjdG9yeTo6Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpUeXBlIGxheWVyVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzTGF5ZXJXQyhsYXllclR5cGUsIGNs
aWVudCwgbV9vYnNlcnZlcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjEyZDJiZTUxMWI5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXll
ckZhY3RvcnkuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NMYXll
ckZhY3RvcnkgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkgewor
cHVibGljOgorICAgIFdDTGF5ZXJGYWN0b3J5KEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXImKTsK
KworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQorICAgIFJl
ZjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmKSBvdmVycmlk
ZTsKKworICAgIEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ1VwYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNDk0YzZmMDU4ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFp
dHMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIGNsYXNzIFdDTGF5ZXJDaGFuZ2UgOiB1aW50MzJfdCB7CisgICAgQ2hpbGRyZW4gICAg
ICAgICAgICAgICAgPSAxIDw8ICAwLAorICAgIE1hc2tMYXllciAgICAgICAgICAgICAgID0gMSA8
PCAgMSwKKyAgICBSZXBsaWNhTGF5ZXIgICAgICAgICAgICA9IDEgPDwgIDIsCisgICAgR2VvbWV0
cnkgICAgICAgICAgICAgICAgPSAxIDw8ICAzLAorICAgIFByZXNlcnZlczNEICAgICAgICAgICAg
ID0gMSA8PCAgNCwKKyAgICBDb250ZW50c1Zpc2libGUgICAgICAgICA9IDEgPDwgIDUsCisgICAg
QmFja2ZhY2VWaXNpYmlsaXR5ICAgICAgPSAxIDw8ICA2LAorICAgIE1hc2tzVG9Cb3VuZHMgICAg
ICAgICAgID0gMSA8PCAgNywKKyAgICBTb2xpZENvbG9yICAgICAgICAgICAgICA9IDEgPDwgIDgs
CisgICAgRGVidWdWaXN1YWxzICAgICAgICAgICAgPSAxIDw8ICA5LAorICAgIFJlcGFpbnRDb3Vu
dCAgICAgICAgICAgID0gMSA8PCAxMCwKKyAgICBDb250ZW50c1JlY3QgICAgICAgICAgICA9IDEg
PDwgMTEsCisgICAgQ29udGVudHNDbGlwcGluZ1JlY3QgICAgPSAxIDw8IDEyLAorICAgIE9wYWNp
dHkgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKKyAgICBCYWNraW5nU3RvcmUgICAgICAgICAg
ICA9IDEgPDwgMTQsCisgICAgVHJhbnNmb3JtICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
IENoaWxkcmVuVHJhbnNmb3JtICAgICAgID0gMSA8PCAxNiwKKyAgICBGaWx0ZXJzICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTcsCisgICAgQmFja2Ryb3BGaWx0ZXJzICAgICAgICAgPSAxIDw8IDE4
LAorICAgIFBsYXRmb3JtTGF5ZXIgICAgICAgICAgID0gMSA8PCAxOSwKK307CisKK3N0cnVjdCBX
Q0xheWVyVXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgaWQ7CisgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IGNoYW5nZXM7CisgICAgVmVj
dG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gY2hpbGRyZW47Cisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+
IG1hc2tMYXllcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRD4gcmVwbGljYUxheWVyOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9z
aXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBzaXplOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm91bmRzT3JpZ2lu
OworICAgIGJvb2wgbWFza3NUb0JvdW5kczsKKyAgICBib29sIHNob3dEZWJ1Z0JvcmRlcjsKKyAg
ICBib29sIHNob3dSZXBhaW50Q291bnRlcjsKKyAgICBib29sIGNvbnRlbnRzVmlzaWJsZTsKKyAg
ICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICBib29sIHByZXNlcnZlczNEOworICAgIFdl
YkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdCb3JkZXJD
b2xvcjsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGg7Cisg
ICAgaW50IHJlcGFpbnRDb3VudDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udGVudHNSZWN0
OworICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0
ZXJzOworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJzOworICAg
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAgICBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OworICAgIHVpbnQ2NF90
IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGVuY29kZXIgPDwgaWQ7CisgICAgICAgIGVuY29kZXIgPDwgY2hhbmdlczsKKyAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgY2hpbGRyZW47CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFz
a0xheWVyKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNrTGF5ZXI7CisgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKQorICAgICAgICAgICAgZW5jb2Rl
ciA8PCByZXBsaWNhTGF5ZXI7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
R2VvbWV0cnkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHBvc2l0aW9uIDw8IGFuY2hvclBvaW50
IDw8IHNpemUgPDwgYm91bmRzT3JpZ2luOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OlByZXNlcnZlczNEKQorICAgICAgICAgICAgZW5jb2RlciA8PCBwcmVzZXJ2ZXMzRDsK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzVmlzaWJsZTsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZmFjZVZpc2liaWxpdHkpCisgICAgICAgICAgICBlbmNv
ZGVyIDw8IGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpNYXNrc1RvQm91bmRzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBtYXNrc1RvQm91
bmRzOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHNvbGlkQ29sb3I7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKQorICAgICAgICAgICAgZW5jb2RlciA8PCBzaG93
RGVidWdCb3JkZXIgPDwgZGVidWdCb3JkZXJDb2xvciA8PCBkZWJ1Z0JvcmRlcldpZHRoOworICAg
ICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc2hvd1JlcGFpbnRDb3VudGVyIDw8IHJlcGFpbnRDb3VudDsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QpCisgICAgICAgICAg
ICBlbmNvZGVyIDw8IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY29u
dGVudHNDbGlwcGluZ1JlY3Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
T3BhY2l0eSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgb3BhY2l0eTsKKyAgICAgICAgaWYgKGNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBlbmNvZGVy
IDw8IGJhY2tpbmdTdG9yZTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpU
cmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKKyAgICAgICAgaWYg
KGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6RmlsdGVycykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmlsdGVyczsKKyAg
ICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGJhY2tkcm9wRmlsdGVycyA8PCBiYWNrZHJvcEZpbHRlcnNSZWN0
OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpCisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDTGF5ZXJVcGF0ZUluZm8mIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuY2hhbmdlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Ok1hc2tMYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubWFza0xheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVy
KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXBsaWNhTGF5ZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSkgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucG9zaXRpb24pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFuY2hv
clBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHNPcmlnaW4p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCkgeworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucHJlc2VydmVzM0QpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpIHsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnRzVmlzaWJsZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYmFja2ZhY2VWaXNpYmlsaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6TWFza3NUb0JvdW5kcykgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQubWFza3NUb0JvdW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNv
bGlkQ29sb3IpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNvbGlk
Q29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpIHsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3dEZWJ1Z0JvcmRlcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuZGVidWdCb3JkZXJDb2xvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGVidWdCb3JkZXJX
aWR0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkgeworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvd1JlcGFpbnRDb3VudGVyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5yZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDb250ZW50c1JlY3QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmNvbnRlbnRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xp
cHBpbmdSZWN0KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250
ZW50c0NsaXBwaW5nUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkp
IHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9wYWNpdHkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQudHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRy
ZW5UcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNo
aWxkcmVuVHJhbnNmb3JtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RmlsdGVycykg
eworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlsdGVycykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0ZXJzKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5iYWNrZHJvcEZpbHRlcnNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxh
dGZvcm1MYXllcikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RydWN0IFdD
VXBhdGVJbmZvIHsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
cm9vdExheWVyOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQ+IGFkZGVkTGF5ZXJzOworICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQ+IHJlbW92ZWRMYXllcnM7CisgICAgVmVjdG9yPFdDTGF5ZXJVcGF0ZUlu
Zm8+IGNoYW5nZWRMYXllcnM7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVy
IDw8IHJvb3RMYXllcjsKKyAgICAgICAgZW5jb2RlciA8PCBhZGRlZExheWVyczsKKyAgICAgICAg
ZW5jb2RlciA8PCByZW1vdmVkTGF5ZXJzOworICAgICAgICBlbmNvZGVyIDw8IGNoYW5nZWRMYXll
cnM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+CisgICAgc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ1VwYXRlSW5m
byYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucm9v
dExheWVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYWRkZWRMYXllcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZW1vdmVkTGF5ZXJzKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
Y2hhbmdlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJLaXQ6OldD
TGF5ZXJDaGFuZ2UsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4sCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6TWFza0xheWVyLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hh
bmdlOjpHZW9tZXRyeSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2ZXMz
RCwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUsCisgICAg
ICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5LAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok1hc2tzVG9Cb3VuZHMsCisgICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6U29saWRDb2xvciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpE
ZWJ1Z1Zpc3VhbHMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UmVwYWludENvdW50
LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCwKKyAgICAgICAg
V2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCwKKyAgICAgICAgV2Vi
S2l0OjpXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5LAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFu
Z2U6OkJhY2tpbmdTdG9yZSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zv
cm0sCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0sCisg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RmlsdGVycywKKyAgICAgICAgV2ViS2l0OjpX
Q0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCmluZGV4IGViNDBiNGM2NmRkOC4uNDlhM2Y0MWVm
NjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKQEAgLTQ0LDYgKzQ0LDcgQEAgU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NBSVJPIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0NGIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIgT04p
CitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR1JBUEhJQ1NfTEFZRVJfV0MgT04pCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX09QRU5HTF9FUyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfT1BFTkdMX0VT
XzMgT04pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442569</attachid>
            <date>2021-10-26 22:35:52 -0700</date>
            <delta_ts>2021-10-29 13:22:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wc-2021-10-27.diff</filename>
            <type>text/plain</type>
            <size>153779</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzM2E1MGI0ZmE3NGUuLjJj
ZjQ4NWZlZjY3YSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDIxLTEwLTI2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gTmV3IEdyYXBoaWNzTGF5ZXIgZm9yIEdQVSBw
cm9jZXNzIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZToKKwogMjAyMS0xMC0yNiAg
QWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQuIFtXUEVdIEJ1bXAgdmVyc2lvbiBudW1iZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FkNjY4
YzY0OGQyLi5iMjVlMzFmNjAwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0x
MC0yNiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAg
ICBbV2luQ2Fpcm9dIE5ldyBHcmFwaGljc0xheWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eUJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5QmFzZTo6c2V0UGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6IERpc3BsYXlMaXN0
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBkb2Vzbid0IGhhdmUgYSBIREMuIERvIG5vdGhpbmcg
Zm9yIERpc3BsYXlMaXN0CisgICAgICAgIGNvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJl
c2VudGVyOjpwYWludEN1cnJlbnRGcmFtZSk6CisgICAgICAgIFBhaW50IGEgZnJhbWUgYnkgdXNp
bmcgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UgaW5zdGVhZCBvZgorICAgICAgICBD
YWlybyBBUEkgZm9yIERpc3BsYXlMaXN0LgorCiAyMDIxLTEwLTI2ICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gYERpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Z2V0Q1RNYCBzaG91bGQgaW5jbHVkZSB0aGUgZGV2aWNlIHNjYWxlIGZh
Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggZDIyNTY5MGY1ZTA0
Li41ZGRhZDljMjU4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fp
cm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAt
MTIsNiArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQkNP
UkVfRElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Y2YiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3djIgogKQogCiBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKQEAgLTI0LDYgKzI1LDggQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhz
UmVjb3JkZXJIYXJmQnV6ei5jcHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3djL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCkBAIC00NCw2ICs0NywxMCBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS93aW4vUEVJbWFnZS5jcHAKICkK
IAorbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyLmgKKykKKwogbGlzdChBUFBFTkQgV2Vi
Q29yZV9MSUJSQVJJRVMKICAgICBjb21jdGwzMgogICAgIGNyeXB0MzIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHlCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmNwcAppbmRleCBmMGM4ZTRlNDU0ZDMuLjhjOGNjMjg4ZjI4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmNwcApAQCAtMzMsNiAr
MzMsMTAgQEAKICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKICNlbmRpZgogCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRycykKQEAgLTEzMCw3ICsxMzQsNyBAQCB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgYXZh
aWxhYmxlRXh0ZW5zaQogICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5z
aW9uKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHlCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHlCYXNlLmgKaW5kZXggZDljNzMzYjZjMzRlLi5mMWVlZDVmNGM0NmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHlCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaApAQCAtOTYsNiArOTYsOSBAQCBwcm90ZWN0
ZWQ6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2Vi
R0xMYXllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX2Rpc3BsYXlCdWZmZXI7
CisjZWxpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVy
KFBsYXRmb3JtTGF5ZXJDb250YWluZXImJik7CisgICAgUGxhdGZvcm1MYXllckNvbnRhaW5lciBt
X3BsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dj
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlV0MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2VXQy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMzE5NzJjMTQxY2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93Yy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZVdDLmNwcApAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpICYmIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5QmFzZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKworUGxhdGZvcm1MYXllciogUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eUJhc2U6OnNldFBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllckNvbnRh
aW5lciYmIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9wbGF0Zm9ybUxheWVyID0gV1RGTW92ZShw
bGF0Zm9ybUxheWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1M
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxh
eWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYTM5ZTA4Y2Nj
ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
Yy9XQ1BsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXQ1BsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
Citwcml2YXRlOgorICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCisgICAgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgZmluYWwgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggZDVhM2JhOTQzOGE5Li4y
YTEyMDk0OTJkNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHN0
YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIAogSERDIEdyYXBo
aWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKKyAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICNpZiAhVVNF
KENBSVJPKQogICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKaW5kZXggZTZk
ZWI1ZWMxMDM4Li5jOWQwOGM3YmUyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uY3BwCkBAIC0yODU3LDE1ICsyODU3LDExIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cGFpbnRDdXJy
ZW50RnJhbWUoV2ViCiAgICAgICAgIEFTU0VSVChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRf
SU5WQUxJRCk7CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmIChjYWlyb0Zvcm1hdCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkKLSAgICAgICAg
ICAgIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0
Y2gpOwotCi0gICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgp
OwotICAgICAgICAgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHksIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICAgICAg
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIGlmIChjYWlyb0Zvcm1h
dCAhPSBDQUlST19GT1JNQVRfSU5WQUxJRCkgeworICAgICAgICAgICAgYXV0byBzdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KGRhdGEpLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgcGl0Y2gp
KTsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUo
c3VyZmFjZSkpOworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIHNyY1Jl
Y3Quc2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0KICNlbHNlCiAjZXJyb3Ig
IlBsYXRmb3JtIG5lZWRzIHRvIGltcGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2Ug
dG8gZ3JhcGhpY3MgY29udGV4dCEiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU0NzQ2NjI0OWIxZi4uMWQ1Y2FlN2Fl
MzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNyBAQAorMjAyMS0xMC0yNiAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIE5ldyBH
cmFwaGljc0xheWVyIGZvciBHUFUgcHJvY2VzcyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBHcmFwaGljc0xheWVyIGltcGxl
bWVudGF0aW9uIEdyYXBoaWNzTGF5ZXJXQyB3aGljaAorICAgICAgICB0cmFuc2ZlcnMgR3JhcGhp
Y3NMYXllciB0cmVlIHRvIEdQVSBwcm9jZXNzIGFuZCBydW5zIHRoZQorICAgICAgICBjb21wb3Np
dG9yIChUZXh0dXJlTWFwcGVyKSBpbiBHUFUgcHJvY2Vzcy4KKworICAgICAgICBJbiBHUFUgcHJv
Y2VzcyBtb2RlLCBXZWJHTCBpcyBydW4gaW4gR1BVIHByb2Nlc3MuIFNvLCB0aGUKKyAgICAgICAg
Y29tcG9zaXRvciBzaG91bGQgYmUgcnVuIGluIEdQVSBwcm9jZXNzLiBPdGhlcndpc2UsIHRoZSBv
dXRwdXQKKyAgICAgICAgdGV4dHVyZSBvZiBXZWJHTCBoYXMgdG8gYmUgdHJhbnNmZXJyZWQgZnJv
bSBHUFUgcHJvY2VzcyB0byB0aGUKKyAgICAgICAgY29tcG9zaXRvciBwcm9jZXNzIChVSSBwcm9j
ZXNzIG9yIHdlYiBwcm9jZXNzKS4KKworICAgICAgICBCZWNhdXNlIEFOR0xFIGlzbid0IHRocmVh
ZC1zYWZlLCB0aGUgY29tcG9zaXRvciBhbmQgV2ViR0wgc2hvdWxkCisgICAgICAgIGJlIHJ1biBp
biB0aGUgc2FtZSB0aHJlYWQgaW4gR1BVIHByb2Nlc3MuCisKKyAgICAgICAgRW5hYmxpbmcgZ3B1
X3Byb2Nlc3Nfd2ViZ2wgYWxzbyBlbmFibGVzIEdQVSBwcm9jZXNzIGNvbXBvc2l0aW5nIG5vdy4K
KyAgICAgICAgPiByZWcgYWRkIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBn
cHVfcHJvY2Vzc193ZWJnbCAvdCBSRUdfRFdPUkQgL2QgMSAvZgorCisgICAgICAgIGdwdV9wcm9j
ZXNzX2NhbnZhc19yZW5kZXJpbmcgY2FuIGFsc28gYmUgZW5hYmxlZC4KKyAgICAgICAgPiByZWcg
YWRkIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFdlYktpdCAvdiBncHVfcHJvY2Vzc19jYW52
YXNfcmVuZGVyaW5nIC90IFJFR19EV09SRCAvZCAxIC9mCisKKyAgICAgICAgRW5hYmxpbmcgZ3B1
X3Byb2Nlc3NfZG9tX3JlbmRlcmluZyBpcyBzdGlsbCBleHBlcmltZW50YWwuCisgICAgICAgID4g
cmVnIGFkZCBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nlc3Nf
ZG9tX3JlbmRlcmluZyAvdCBSRUdfRFdPUkQgL2QgMSAvZgorCisgICAgICAgIFRoZSBmb2xsb3dp
bmcgY29tbWFuZHMgcmVzdG9yZSB0aGUgbm9uLUdQVSBwcm9jZXNzIG1vZGUuCisgICAgICAgID4g
cmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nl
c3NfY2FudmFzX3JlbmRlcmluZyAvZgorICAgICAgICA+IHJlZyBkZWxldGUgSEtFWV9DVVJSRU5U
X1VTRVJcU29mdHdhcmVcV2ViS2l0IC92IGdwdV9wcm9jZXNzX3dlYmdsIC9mCisgICAgICAgID4g
cmVnIGRlbGV0ZSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxXZWJLaXQgL3YgZ3B1X3Byb2Nl
c3NfZG9tX3JlbmRlcmluZyAvZgorCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Y3JlYXRlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRH
TCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVQcm9jZXNzOjpzaGFyZWRTY2VuZUNvbnRleHQpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0Ojpz
Y2hlZHVsZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcyk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6flJlbW90ZVdDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluOiBBZGRlZC4K
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V0NTY2VuZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldD
U2NlbmU6On5XQ1NjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V0NTY2VuZTo6dXBkYXRlKToKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaDogQWRkZWQuCisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXQ1NjZW5lQ29udGV4dDo6V0NTY2VuZUNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXQ1NjZW5lQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdl
YktpdDo6V0NTY2VuZUNvbnRleHQ6OmNyZWF0ZVRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXQ1NjZW5lQ29udGV4dDo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIEdQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI6OmVuc3VyZUhvbGRlckZvcldp
bmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyOjpyZW1v
dmVIb2xkZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2luL0dQVVByb2Nlc3NNYWluV2luLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc01haW4pOgorICAgICAgICAqIFBsYXRmb3Jt
V2luLmNtYWtlOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAgIChjb25k
aXRpb25zX2Zvcl9oZWFkZXIpOgorICAgICAgICAqIFNoYXJlZC9EcmF3aW5nQXJlYUluZm8uaDoK
KyAgICAgICAgKiBVSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6RHJhd2luZ0FyZWFQcm94eVdDKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjpwYWludCk6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eVdDOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eVdDOjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlXQzo6ZGlzY2FyZEJhY2tpbmdTdG9yZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhaW50KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OlJlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6
On5SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdD
TGF5ZXJUcmVlSG9zdFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVHUFVQcm9jZXNz
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V0NMYXllclRyZWVIb3N0UHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHk6OmRpZFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2Mv
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Ojp3Y0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGNvbnN0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3Mvd2MvV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjpXQ1BsYXRmb3JtTGF5ZXJH
Q0dMKToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6Z3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWE6OnN1cHBvcnRzR1BVUHJvY2Vzc1JlbmRlcmluZyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9EcmF3aW5nQXJlYVdDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhV0M6OkRyYXdpbmdBcmVhV0MpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjp+
RHJhd2luZ0FyZWFXQyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dXBkYXRlUm9v
dExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6YXR0YWNoVmlld092
ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0
TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6
OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OmZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVdDOjppc0NvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhV0M6OnVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhV0M6OnNlbmRVcGRhdGVBQyk6CisgICAgICAgIChXZWJLaXQ6OnNob3VsZFBhaW50Qm91bmRz
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OnNlbmRVcGRhdGVOb25BQyk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJSZW1vdmVkKToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Y29tbWl0TGF5ZXJVcGF0ZUluZm8pOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZpY2VT
Y2FsZUZhY3RvciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdp
bmdBcmVhV0MuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBo
aWNzTGF5ZXJXQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6
OkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6fkdy
YXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Z2VuZXJh
dGVMYXllcklEKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpwcmltYXJ5TGF5
ZXJJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNE
aXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDaGls
ZHJlbik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGQpOgorICAg
ICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleCk6CisgICAgICAg
IChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJL
aXQ6OkdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXll
cldDOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNl
dFJlcGxpY2F0ZWRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNl
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRBbmNob3JQ
b2ludCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0U2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Qm91bmRzT3JpZ2luKToKKyAgICAgICAg
KFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0
OjpHcmFwaGljc0xheWVyV0M6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktp
dDo6R3JhcGhpY3NMYXllcldDOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBo
aWNzTGF5ZXJXQzo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c0NsaXBwaW5nUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJX
Qzo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpz
ZXRDb250ZW50c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNl
dEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6
c2V0Q29udGVudHNUb1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVy
V0M6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhp
Y3NMYXllcldDOjp1c2VzQ29udGVudHNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6R3Jh
cGhpY3NMYXllcldDOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNz
TGF5ZXJXQzo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6ZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0
RmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BG
aWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZp
bHRlcnNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvV0NCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldDQmFja2luZ1N0b3JlOjpXQ0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldDQmFj
a2luZ1N0b3JlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3Jl
OjpzZXRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQmFja2luZ1N0b3JlOjpiaXRt
YXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0JhY2tpbmdTdG9yZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V0NCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldDTGF5ZXJGYWN0b3J5OjpXQ0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJL
aXQ6OldDTGF5ZXJGYWN0b3J5OjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXQ0xheWVyVXBhdGVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0xh
eWVyVXBhdGVJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ1VwYXRlSW5mbzo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NVcGF0ZUluZm86OmRlY29kZSk6CisKIDIw
MjEtMTAtMjYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZW1vdmUgcHJvcGVydGllcyBzZXQgYnkgTlNVUkxQcm90b2NvbCBvbiBOU1VSTFJl
cXVlc3QgYmVmb3JlIHNlcmlhbGl6aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODcwZTM3ZTA1ZTA1Li43
MjgzM2Q3MmVhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19M
QVlFUl9XQykKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMzYsNiAr
MzQwLDI4IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29uZmlndXJlTG9nZ2lu
Z0NoYW5uZWwoY29uc3QgU3RyaW5nJiBjaGFubmVsTmFtCiAjZW5kaWYKIH0KIAorI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRl
V0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlm
aWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5hZGQoaWRlbnRpZmllciwgUmVtb3RlV0NMYXllclRyZWVI
b3N0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoaWRlbnRpZmllciksIG5hdGl2ZVdpbmRvdykpOwor
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisK
K3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJUcmVlSG9zdChX
ZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX3Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1vdmUoaWRlbnRpZmllcik7Cit9CisKK1JlZlB0cjxS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlm
aWVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgYXV0byBpdGVyID0g
bV9yZW1vdGVHcmFwaGljc0NvbnRleHRHTE1hcC5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChp
dGVyID09IG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKyNlbmRpZgorCiBi
b29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNz
dXJlKCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNYXAudmFsdWVzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDIxYWFi
NWNjODJjNi4uYWMyYjFjZWQ4MmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTU3LDYgKzU3LDEwIEBACiAjaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9UQ0NTUEkuaD4KICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQorI2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBT
ZWN1cml0eU9yaWdpbkRhdGE7CkBAIC05MSw2ICs5NSwxMCBAQCBzdHJ1Y3QgTWVkaWFPdmVycmlk
ZXNGb3JUZXN0aW5nOwogc3RydWN0IFJlbW90ZUF1ZGlvU2Vzc2lvbkNvbmZpZ3VyYXRpb247CiBz
dHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAorI2lmIFVT
RShHUkFQSElDU19MQVlFUl9XQykKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDsKKyNlbmRp
ZgorCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcywgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4KICAgICAsIHB1YmxpYyBXZWJDb3JlOjpOb3dQbGF5aW5nTWFuYWdlcjo6
Q2xpZW50CkBAIC0xNjEsNiArMTY5LDEwIEBAIHB1YmxpYzoKICAgICBSZW1vdGVJbWFnZURlY29k
ZXJBVkZQcm94eSYgaW1hZ2VEZWNvZGVyQVZGUHJveHkoKTsKICNlbmRpZgogCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorICAgIFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gZmlu
ZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisj
ZW5kaWYKKwogICAgIHZvaWQgdXBkYXRlU3VwcG9ydGVkUmVtb3RlQ29tbWFuZHMoKTsKIAogICAg
IGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKQEAgLTIyOCw2ICsy
NDAsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICB2b2lkIGNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKGNv
bnN0IFN0cmluZyYsIFdURkxvZ0NoYW5uZWxTdGF0ZSwgV1RGTG9nTGV2ZWwpOwogCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZvaWQgY3JlYXRlV0NMYXllclRyZWVIb3N0KFdlYktp
dDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAg
ICB2b2lkIHJlbGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyKTsKKyNlbmRpZgorCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2
b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIGZpbmFs
OwpAQCAtMzA5LDYgKzMyNiwxMSBAQCBwcml2YXRlOgogICAgIHVzaW5nIFJlbW90ZUF1ZGlvSGFy
ZHdhcmVMaXN0ZW5lck1hcCA9IEhhc2hNYXA8UmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVySWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lclByb3h5
Pj47CiAgICAgUmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFwIG1fcmVtb3RlQXVkaW9IYXJk
d2FyZUxpc3RlbmVyTWFwOwogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHVzaW5n
IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcCA9IEhhc2hNYXA8V0NMYXllclRyZWVIb3N0SWRlbnRp
Zmllciwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4+OworICAgIFJlbW90
ZVdDTGF5ZXJUcmVlSG9zdE1hcCBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcDsKKyNlbmRpZgor
CiAgICAgUmVmUHRyPFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5PiBtX3JlbW90ZVJl
bW90ZUNvbW1hbmRMaXN0ZW5lcjsKICAgICBib29sIG1faXNBY3RpdmVOb3dQbGF5aW5nUHJvY2Vz
cyB7IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggYzFiZjgwMTlj
ZWFiLi4zOTFjMTlmZTlkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC01MSw2
ICs1MSwxMCBAQCBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlz
cGF0Y2hNZXNzYWdlIHsKICAgICBSZWxlYXNlUmVtb3RlQ29tbWFuZExpc3RlbmVyKFdlYktpdDo6
UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVySWRlbnRpZmllciBpZGVudGlmaWVyKQogICAgIFNl
dFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzKQogICAgIENv
bmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdU
RkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQor
I2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBDcmVhdGVXQ0xheWVyVHJlZUhvc3QoV2Vi
S2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2
ZVdpbmRvdykKKyAgICBSZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVI
b3N0SWRlbnRpZmllciBpZGVudGlmaWVyKQorI2VuZGlmCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaAppbmRleCAwYWY0
OTgyNzg0YTguLjFhMzlhOGRhMWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vz
cy5oCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlD
b25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyNp
bmNsdWRlICJXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIE5vd1BsYXlpbmdNYW5hZ2VyOwogc3RydWN0IE1vY2tNZWRpYURl
dmljZTsKQEAgLTkyLDYgKzk2LDEwIEBAIHB1YmxpYzoKICAgICBXb3JrUXVldWUmIGxpYldlYlJU
Q0NvZGVjc1F1ZXVlKCk7CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAg
ICBXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlciYgc2hhcmVkU2NlbmVDb250ZXh0KCkgeyByZXR1
cm4gbV9zaGFyZWRTY2VuZUNvbnRleHQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZQOSkKICAg
ICB2b2lkIGVuYWJsZVZQOURlY29kZXJzKGJvb2wgc2hvdWxkRW5hYmxlVlA4RGVjb2RlciwgYm9v
bCBzaG91bGRFbmFibGVWUDlEZWNvZGVyLCBib29sIHNob3VsZEVuYWJsZVZQOVNXRGVjb2Rlcik7
CiAjZW5kaWYKQEAgLTE4Niw2ICsxOTQsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya1F1
ZXVlPiBtX2xpYldlYlJUQ0NvZGVjc1F1ZXVlOwogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisgICAgV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIgbV9zaGFyZWRTY2VuZUNv
bnRleHQ7CisjZW5kaWYKKwogICAgIHN0cnVjdCBHUFVTZXNzaW9uIHsKICAgICAgICAgU3RyaW5n
IG1lZGlhQ2FjaGVEaXJlY3Rvcnk7CiAjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IGVmNDFlYTYwODJiYS4uYTA3Mjk3NjVjYjVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBH
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmLCBJUEM6
OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBpbml0aWFsaXplKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKaW5kZXggMzI2YjA3ZjJlYmRlLi41YTZjZTY1ZTc0
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRX
ZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3Bw
CkBAIC00MiwxMCArNDIsMTIgQEAgc3RhdGljIGJvb2wgZGlkU2NoZWR1bGVGcmVlV2ViR0xSZW5k
ZXJpbmdSZXNvdXJjZXM7CiAKIHZvaWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0OjpzY2hlZHVsZUZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcygpCiB7CisjaWYgIVVTRShH
UkFQSElDU19MQVlFUl9XQykKICAgICBpZiAoZGlkU2NoZWR1bGVGcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpCiAgICAgICAgIHJldHVybjsKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hB
ZnRlcihmcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNUaW1lb3V0LCBmcmVlV2ViR0xSZW5kZXJp
bmdSZXNvdXJjZXMpOwogICAgIGRpZFNjaGVkdWxlRnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2Vz
ID0gdHJ1ZTsKKyNlbmRpZgogfQogCiB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2Vz
UmVxdWVzdDo6ZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVl
SG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZDNkMjlm
YzRlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRy
ZWVIb3N0LmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzcy5oIgorI2luY2x1
ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiUmVtb3RlV0NMYXllclRy
ZWVIb3N0TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgorI2luY2x1
ZGUgIldDU2NlbmUuaCIKKyNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4gUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVjdGlv
blRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1v
dGVXQ0xheWVyVHJlZUhvc3Q+KGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGlkZW50aWZpZXIsIG5h
dGl2ZVdpbmRvdyk7Cit9CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRy
ZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBu
YXRpdmVXaW5kb3cpCisgICAgOiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoY29ubmVjdGlvblRv
V2ViUHJvY2VzcykKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9zaGFy
ZWRTY2VuZUNvbnRleHRIb2xkZXIoY29ubmVjdGlvblRvV2ViUHJvY2Vzcy5ncHVQcm9jZXNzKCku
c2hhcmVkU2NlbmVDb250ZXh0KCkuZW5zdXJlSG9sZGVyRm9yV2luZG93KG5hdGl2ZVdpbmRvdykp
Cit7CisgICAgbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworICAgIG1f
c2NlbmUgPSBtYWtlVW5pcXVlPFdDU2NlbmU+KCk7CisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbc2NlbmUgPSBtX3NjZW5lLmdldCgpLCBzY2Vu
ZUNvbnRleHRIb2xkZXIgPSBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5nZXQoKSwgbmF0aXZl
V2luZG93XSB7CisgICAgICAgIGlmICghc2NlbmVDb250ZXh0SG9sZGVyLT5jb250ZXh0KQorICAg
ICAgICAgICAgc2NlbmVDb250ZXh0SG9sZGVyLT5jb250ZXh0LmVtcGxhY2UobmF0aXZlV2luZG93
KTsKKyAgICAgICAgc2NlbmUtPmluaXRpYWxpemUoKnNjZW5lQ29udGV4dEhvbGRlci0+Y29udGV4
dCk7CisgICAgfSk7Cit9CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6flJlbW90ZVdDTGF5ZXJU
cmVlSG9zdCgpCit7CisgICAgQVNTRVJUKG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcyk7CisgICAg
bV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgYXV0byBzY2VuZUNvbnRl
eHRIb2xkZXIgPSBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmdwdVByb2Nlc3MoKS5zaGFyZWRT
Y2VuZUNvbnRleHQoKS5yZW1vdmVIb2xkZXIobV9zaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVl
dWUoKS5kaXNwYXRjaChbc2NlbmVDb250ZXh0SG9sZGVyID0gV1RGTW92ZShzY2VuZUNvbnRleHRI
b2xkZXIpLCBzY2VuZSA9IFdURk1vdmUobV9zY2VuZSldKCkgbXV0YWJsZSB7CisgICAgICAgIC8v
IERlc3Ryb3kgc2NlbmUgb24gdGhlIFN0cmVhbVdvcmtRdWV1ZSB0aHJlYWQuCisgICAgICAgIHNj
ZW5lID0gbnVsbHB0cjsKKyAgICAgICAgLy8gc2NlbmVDb250ZXh0SG9sZGVyIGNhbiBiZSBkZXN0
cm95ZWQgb24gdGhlIFN0cmVhbVdvcmtRdWV1ZSB0aHJlYWQgYmVjYXVzZSBpdCBoYXNPbmVSZWYu
CisgICAgfSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlV0NMYXllclRyZWVIb3N0Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZtX2Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlV0NMYXll
clRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVdDTGF5ZXJUcmVl
SG9zdDo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlKQoreworICAgIC8vIGZpbmRSZW1vdGVH
cmFwaGljc0NvbnRleHRHTCBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZAorICAg
IGF1dG8gcmVtb3RlR0NHTCA9IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzLCBbdGhpc10o
YXV0byYgbGF5ZXJVcGRhdGUpIC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gewor
ICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3Jt
TGF5ZXIpIHsKKyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlmaWVyPEdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0p
OworCisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRj
aChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc2NlbmUgPSBtX3NjZW5lLmdldCgp
LCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSksIHJlbW90ZUdDR0wgPSBXVEZNb3ZlKHJlbW90ZUdD
R0wpXSgpIG11dGFibGUgeworICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBkYXRlKSwg
V1RGTW92ZShyZW1vdGVHQ0dMKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6RGlkVXBkYXRlKCkpOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZGM0ZmJiNDEwYTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVI
b3N0LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIldDU2hhcmVk
U2NlbmVDb250ZXh0SG9sZGVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzczsKK2NsYXNzIFdDU2NlbmU7CitzdHJ1Y3QgV0NVcGF0ZUluZm87
CisKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXll
clRyZWVIb3N0PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NM
YXllclRyZWVIb3N0SWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICBSZW1v
dGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYktpdDo6V0NM
YXllclRyZWVIb3N0SWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+UmVt
b3RlV0NMYXllclRyZWVIb3N0KCk7CisgICAgLy8gbWVzc2FnZSBoYW5kbGVycworICAgIHZvaWQg
dXBkYXRlKFdDVXBhdGVJbmZvJiYpOworCitwcml2YXRlOgorICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworICAgIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwor
ICAgIFJlZlB0cjxXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcjo6SG9sZGVyPiBtX3NoYXJlZFNj
ZW5lQ29udGV4dEhvbGRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V0NTY2VuZT4gbV9zY2VuZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xB
WUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNTE2ZmRhNDE5MWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NM
YXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CisKK21lc3NhZ2VzIC0+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdCBOb3RSZWZDb3VudGVkIHsKKyAg
ICBVcGRhdGUoc3RydWN0IFdlYktpdDo6V0NVcGF0ZUluZm8gdXBkYXRlSW5mbykKK30KKworI2Vu
ZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjgwNGU5MGJmMWM2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcApAQCAtMCwwICsxLDE5NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NTY2VuZS5o
IgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJXQ1NjZW5lQ29udGV4dC5oIgorI2luY2x1ZGUgIldD
VXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0cnVjdCBXQ1NjZW5lOjpMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBMYXllcigpID0gZGVmYXVsdDsKKworICAgIC8vIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyOjpDbGllbnQKKyAgICB2b2lkIHBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0cm95
ZWQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgdGV4bWFwTGF5ZXIuc2V0Q29udGVudHNMYXll
cihudWxscHRyKTsKKyAgICB9CisgICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5
KCkgb3ZlcnJpZGUgeyB9CisKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIgdGV4bWFw
TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXI+IGJhY2tkcm9wTGF5ZXI7Cit9OworCit2b2lkIFdDU2NlbmU6OmluaXRpYWxpemUo
V0NTY2VuZUNvbnRleHQmIGNvbnRleHQpCit7CisgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBU
ZXh0dXJlTWFwcGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KKyAgICBtX2NvbnRl
eHQgPSAmY29udGV4dDsKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fdGV4dHVyZU1hcHBlciA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZU1hcHBlcigpOworfQor
CitXQ1NjZW5lOjpXQ1NjZW5lKCkgPSBkZWZhdWx0OworCitXQ1NjZW5lOjp+V0NTY2VuZSgpCit7
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBw
ZXIgPSBudWxscHRyOworfQorCit2b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVw
ZGF0ZSwgVmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+JiYgcmVtb3RlR0NH
TCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoYXV0byBpZCA6IHVwZGF0ZS5hZGRlZExheWVycykgeworICAg
ICAgICBhdXRvIGxheWVyID0gbWFrZVVuaXF1ZTxMYXllcj4oKTsKKyAgICAgICAgbV9sYXllcnMu
YWRkKGlkLCBXVEZNb3ZlKGxheWVyKSk7CisgICAgfQorCisgICAgYXV0byByZW1vdGVHQ0dMSXRl
cmF0b3IgPSByZW1vdGVHQ0dMLmJlZ2luKCk7CisKKyAgICBmb3IgKGF1dG8mIGxheWVyVXBkYXRl
IDogdXBkYXRlLmNoYW5nZWRMYXllcnMpIHsKKyAgICAgICAgYXV0byBsYXllciA9IG1fbGF5ZXJz
LmdldChsYXllclVwZGF0ZS5pZCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRDaGlsZHJlbihXVEY6Om1hcChsYXllclVwZGF0ZS5jaGlsZHJlbiwgWyZdKGF1dG8gaWQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJm1fbGF5ZXJzLmdldChpZCktPnRleG1hcExheWVy
OworICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza0xheWVyKSB7CisgICAgICAgICAgICBXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTGF5ZXIqIG1hc2tMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUubWFza0xheWVyKQorICAgICAgICAgICAgICAgIG1hc2tMYXllciA9ICZt
X2xheWVycy5nZXQoKmxheWVyVXBkYXRlLm1hc2tMYXllciktPnRleG1hcExheWVyOworICAgICAg
ICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tMYXllcihtYXNrTGF5ZXIpOworICAgICAg
ICB9CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVw
bGljYUxheWVyKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJl
cGxpY2FMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUucmVwbGlj
YUxheWVyKQorICAgICAgICAgICAgICAgIHJlcGxpY2FMYXllciA9ICZtX2xheWVycy5nZXQoKmxh
eWVyVXBkYXRlLnJlcGxpY2FMYXllciktPnRleG1hcExheWVyOworICAgICAgICAgICAgbGF5ZXIt
PnRleG1hcExheWVyLnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRQb3NpdGlvbihsYXllclVwZGF0
ZS5wb3NpdGlvbik7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QW5jaG9yUG9p
bnQobGF5ZXJVcGRhdGUuYW5jaG9yUG9pbnQpOworICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldFNpemUobGF5ZXJVcGRhdGUuc2l6ZSk7CisgICAgICAgICAgICBsYXllci0+dGV4bWFw
TGF5ZXIuc2V0Qm91bmRzT3JpZ2luKGxheWVyVXBkYXRlLmJvdW5kc09yaWdpbik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVz
ZXJ2ZXMzRCkKKyAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRQcmVzZXJ2ZXMzRChs
YXllclVwZGF0ZS5wcmVzZXJ2ZXMzRCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICAgICAgbGF5ZXItPnRleG1h
cExheWVyLnNldENvbnRlbnRzUmVjdChsYXllclVwZGF0ZS5jb250ZW50c1JlY3QpOworICAgICAg
ICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xpcHBp
bmdSZWN0KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzQ2xpcHBp
bmdSZWN0KGxheWVyVXBkYXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0KTsKKyAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1Zpc2libGUpCisgICAg
ICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxheWVyVXBkYXRl
LmNvbnRlbnRzVmlzaWJsZSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgbGF5ZXItPnRleG1h
cExheWVyLnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllclVwZGF0ZS5iYWNrZmFjZVZpc2liaWxp
dHkpOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1h
c2tzVG9Cb3VuZHMpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0TWFza3NUb0Jv
dW5kcyhsYXllclVwZGF0ZS5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGF1
dG8gYml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOworICAgICAgICAg
ICAgaWYgKGJpdG1hcCkgeworICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAg
ICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBl
ciwgaW1hZ2UuZ2V0KCksIGJpdG1hcC0+c2l6ZSgpLCB7IHsgfSwgYml0bWFwLT5zaXplKCkgfSk7
CisgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShsYXll
ci0+YmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsKKyAgICAg
ICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlNvbGlkQ29sb3IpCisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0U29saWRD
b2xvcihsYXllclVwZGF0ZS5zb2xpZENvbG9yKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpCisgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0RGVidWdWaXN1YWxzKGxheWVyVXBkYXRlLnNob3dEZWJ1Z0JvcmRlciwg
bGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJXaWR0
aCk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVw
YWludENvdW50KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFJlcGFpbnRDb3Vu
dGVyKGxheWVyVXBkYXRlLnNob3dSZXBhaW50Q291bnRlciwgbGF5ZXJVcGRhdGUucmVwYWludENv
dW50KTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpP
cGFjaXR5KQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE9wYWNpdHkobGF5ZXJV
cGRhdGUub3BhY2l0eSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6VHJhbnNmb3JtKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldFRy
YW5zZm9ybShsYXllclVwZGF0ZS50cmFuc2Zvcm0pOworICAgICAgICBpZiAobGF5ZXJVcGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICAgICAg
bGF5ZXItPnRleG1hcExheWVyLnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVyVXBkYXRlLmNoaWxk
cmVuVHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpGaWx0ZXJzKQorICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEZpbHRl
cnMobGF5ZXJVcGRhdGUuZmlsdGVycyk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKSB7CisgICAgICAgICAgICBpZiAobGF5
ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBsYXll
ci0+YmFja2Ryb3BMYXllci5yZXNldCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFsYXllci0+YmFja2Ryb3BMYXllcikgeworICAgICAgICAgICAgICAgICAgICBs
YXllci0+YmFja2Ryb3BMYXllciA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxh
eWVyPigpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0QW5j
aG9yUG9pbnQoeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5ZXIt
PnNldENvbnRlbnRzVmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJh
Y2tkcm9wTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGxheWVyLT5iYWNrZHJvcExheWVyLT5zZXRGaWx0ZXJzKGxheWVyVXBk
YXRlLmJhY2tkcm9wRmlsdGVycyk7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tkcm9wTGF5
ZXItPnNldFNpemUobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2Ryb3BMYXllci0+c2V0UG9zaXRpb24obGF5
ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdC5yZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BMYXllcihs
YXllci0+YmFja2Ryb3BMYXllci5nZXQoKSk7CisgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5
ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJh
dG9yKSB7CisgICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpyZW1vdGVHQ0dM
SXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1MYXll
ci0+c2V0Q2xpZW50KGxheWVyKTsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKG51bGxwdHIp
OworICAgICAgICB9CisgICAgICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAgIH0KKyAgICBB
U1NFUlQocmVtb3RlR0NHTEl0ZXJhdG9yID09IHJlbW90ZUdDR0wuZW5kKCkpOworCisgICAgZm9y
IChhdXRvIGlkIDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92
ZShpZCk7CisKKyAgICBhdXRvIHJvb3RMYXllciA9ICZtX2xheWVycy5nZXQodXBkYXRlLnJvb3RM
YXllciktPnRleG1hcExheWVyOworICAgIHJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJz
aXZlbHkoTW9ub3RvbmljVGltZTo6bm93KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB3aW5k
b3dTaXplID0gZXhwYW5kZWRJbnRTaXplKHJvb3RMYXllci0+c2l6ZSgpKTsKKyAgICBnbFZpZXdw
b3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICByb290TGF5ZXItPnBhaW50
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5
KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
KworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjYzZWQwM2YzZWU4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVy
TGF5ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDsKK2NsYXNzIFdD
U2NlbmVDb250ZXh0Oworc3RydWN0IFdDVXBhdGVJbmZvOworCitjbGFzcyBXQ1NjZW5lIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ1NjZW5lKCk7CisgICAg
fldDU2NlbmUoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQmKTsKKyAgICB2
b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMPj4mJik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IExheWVyOworICAgIHVzaW5nIExh
eWVyTWFwID0gSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVyPj47CisKKyAg
ICBXQ1NjZW5lQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworICAgIExheWVyTWFwIG1f
bGF5ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmRmNzg0NTZjNmMzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKQEAgLTAsMCArMSw2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NT
Y2VuZUNvbnRleHQuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUg
PFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dDU2NlbmVDb250ZXh0OjpXQ1NjZW5lQ29udGV4
dCh1aW50NjRfdCBuYXRpdmVXaW5kb3cpCit7CisgICAgbV9nbENvbnRleHQgPSBXZWJDb3JlOjpH
TENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxHTE5hdGl2
ZVdpbmRvd1R5cGU+KG5hdGl2ZVdpbmRvdykpOworfQorCitXQ1NjZW5lQ29udGV4dDo6fldDU2Nl
bmVDb250ZXh0KCkgPSBkZWZhdWx0OworCitib29sIFdDU2NlbmVDb250ZXh0OjptYWtlQ29udGV4
dEN1cnJlbnQoKQoreworICAgIHJldHVybiBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBXQ1NjZW5l
Q29udGV4dDo6Y3JlYXRlVGV4dHVyZU1hcHBlcigpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgV0NTY2VuZUNvbnRleHQ6OnN3YXBC
dWZmZXJzKCkKK3sKKyAgICBtX2dsQ29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWQ2MmJmZmY3ODdl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1dDU2NlbmVDb250ZXh0LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdMQ29udGV4dDsKK2Ns
YXNzIFRleHR1cmVNYXBwZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ1Nj
ZW5lQ29udGV4dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgV0NTY2VuZUNvbnRleHQodWludDY0X3QgbmF0aXZlV2luZG93KTsKKyAgICB+V0NT
Y2VuZUNvbnRleHQoKTsKKworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IGNyZWF0ZVRleHR1cmVNYXBwZXIo
KTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NoYXJlZFNjZW5lQ29udGV4
dEhvbGRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2hhcmVk
U2NlbmVDb250ZXh0SG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi45YjE3ZmZjM2NhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIuaApAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NTY2VuZUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8vIENyZWF0aW5nIGEgV0NTY2VuZUNvbnRleHQgZm9yIGEgd2luZG93IGZhaWxzIGlmIHRo
ZSB3aW5kb3cgYWxyZWFkeQorLy8gaGFzIG9uZS4gV2hpbGUgbmF2aWdhdGluZyB0byBhIG5ldyBw
YWdlIHdpdGggYSBuZXcgV2ViUHJvY2VzcywgdGhlCisvLyBwcm92aXNpb25hbCBXZWJLaXQ6Oldl
YlBhZ2UgaW4gdGhlIG5ldyBXZWJQcm9jZXNzIGhhcyB0aGUgc2FtZQorLy8gd2luZG93IGhhbmRs
ZS4gV0NTY2VuZUNvbnRleHQgc2hvdWxkIGJlIHNoYXJlZCBhbW9uZyBhbGwKKy8vIFJlbW90ZVdD
TGF5ZXJUcmVlSG9zdHMgdGhhdCByZW5kZXIgdG8gdGhlIHNhbWUgbmF0aXZlIHdpbmRvdy4KK2Ns
YXNzIFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcik7CitwdWJsaWM6CisgICAgV0NTaGFyZWRTY2Vu
ZUNvbnRleHRIb2xkZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1Y3QgSG9sZGVyIDogUmVmQ291
bnRlZDxIb2xkZXI+IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBpbnQ2NF90IG5hdGl2ZVdpbmRvdzsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBt
ZW1iZXIgaXMgYWNjZXNzZWQgaW4gdGhlIE9wZW5HTCB0aHJlYWQKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxXQ1NjZW5lQ29udGV4dD4gY29udGV4dDsKKyAgICB9OworCisgICAgUmVmPEhvbGRlcj4g
ZW5zdXJlSG9sZGVyRm9yV2luZG93KGludDY0X3QgbmF0aXZlV2luZG93KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2hh
c2guYWRkKG5hdGl2ZVdpbmRvdywgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpIAorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICBhdXRvIGhvbGRlciA9IGFkb3B0UmVmKCpuZXcgSG9sZGVyKTsKKyAgICAgICAgaG9sZGVy
LT5uYXRpdmVXaW5kb3cgPSBuYXRpdmVXaW5kb3c7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBob2xkZXIucHRyKCk7CisgICAgICAgIHJldHVybiBob2xkZXI7CisgICAgfQorCisg
ICAgUmVmUHRyPEhvbGRlcj4gcmVtb3ZlSG9sZGVyKFJlZjxIb2xkZXI+JiYgaG9sZGVyKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCFob2xk
ZXItPmhhc09uZVJlZigpKSAKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBt
X2hhc2gucmVtb3ZlKGhvbGRlci0+bmF0aXZlV2luZG93KTsKKyAgICAgICAgcmV0dXJuIGhvbGRl
cjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxpbnQ2NF90LCBIb2xkZXIqPiBtX2hh
c2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElD
U19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BV
UHJvY2Vzc01haW5XaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dpbi9HUFVQcm9j
ZXNzTWFpbldpbi5jcHAKaW5kZXggZjAxZTYzOWQ5ZDc4Li4yNzIzNGNiZmI1ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93aW4vR1BVUHJvY2Vzc01haW5XaW4uY3BwCkBA
IC0zMCwxNCArMzAsMzEgQEAKIAogI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAj
aW5jbHVkZSAiR1BVUHJvY2Vzcy5oIgorI2luY2x1ZGUgPE9iamJhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJSQVJZKHVzZXIzMik7CitTT0ZU
X0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dCwgQk9P
TCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRFWFQpKTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3NNYWluV2luIGZpbmFsOiBwdWJsaWMgQXV4aWxp
YXJ5UHJvY2Vzc01haW5CYXNlTm9TaW5nbGV0b248R1BVUHJvY2Vzcz4geworcHVibGljOgorICAg
IGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChT
ZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKQorICAgICAgICAgICAgU2V0UHJvY2Vz
c0RwaUF3YXJlbmVzc0NvbnRleHRQdHIoKShEUElfQVdBUkVORVNTX0NPTlRFWFRfUEVSX01PTklU
T1JfQVdBUkVfVjIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBTZXRQcm9jZXNzRFBJQXdh
cmUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfTsKIAogaW50IEdQVVByb2Nlc3NN
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyAgICAvLyBmb3IgRGlyZWN0WAorICAgIEhS
RVNVTFQgaHIgPSA6OkNvSW5pdGlhbGl6ZUV4KG51bGxwdHIsIENPSU5JVF9NVUxUSVRIUkVBREVE
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICByZXR1cm4gQXV4aWxp
YXJ5UHJvY2Vzc01haW48R1BVUHJvY2Vzc01haW5XaW4+KGFyZ2MsIGFyZ3YpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVdpbi5jbWFrZQppbmRleCAwMTU2NWQ1NTA2OTcuLmFiNWEyZGYwOGVhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMSw2ICsxMSwxMCBAQCBhZGRfZGVmaW5pdGlvbnMoLURC
VUlMRElOR19XRUJLSVQpCiBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCiAKKyAgICBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKKyAgICBHUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1Nj
ZW5lQ29udGV4dC5jcHAKKwogICAgIEdQVVByb2Nlc3MvbWVkaWEvd2luL1JlbW90ZU1lZGlhUGxh
eWVyUHJveHlXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL3dpbi9HUFVQcm9jZXNzTWFpbldpbi5j
cHAKQEAgLTY5LDYgKzczLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKIAorICAgIFVJ
UHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCisKICAgICBVSVByb2Nlc3Mvd2luL1Bh
Z2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdp
bi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKQEAgLTc2LDYgKzgy
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBy
b2Nlc3NQb29sV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKIAorICAgIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAor
CiAgICAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvd2luL1ZpZGVvTGF5ZXJSZW1vdGVXaW4uY3BwCiAK
ICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAK
QEAgLTk1LDYgKzEwMywxMCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93
Yy9EcmF3aW5nQXJlYVdDLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xh
eWVyV0MuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmNwcAor
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAogCiAgICAgV2ViUHJv
Y2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0xMDIsNiArMTE0LDcgQEAgbGlzdChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL2dyYXBoaWNzL3djIgogICAg
ICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0v
UGxhdGZvcm0vZ2VuZXJpYyIKICAgICAiJHtXRUJLSVRfRElSfS9QbHVnaW5Qcm9jZXNzL3dpbiIK
QEAgLTExOSwxNiArMTMyLDI1IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCiAgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL1BsdWdpbnMvd2luIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93
YyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgorICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mi
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbiIKICAgICAiJHtXRUJL
SVRfRElSfS93aW4iCiApCiAKK2xpc3QoQVBQRU5EIFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwor
ICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0CisKKyAgICBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eQorKQor
CiBzZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVN9KQogc2V0KFdlYktpdENvbW1vblN5c3RlbUluY2x1ZGVEaXJlY3RvcmllcyAke1dl
YktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRkMWFkN2UxNS4uMzc1NGFlNDQ3NDVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTM1Nyw2ICszNTcsNyBA
QCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAn
V2ViS2l0OjpUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6WFJE
ZXZpY2VJZGVudGlmaWVyJywKQEAgLTM2OCw2ICszNjksNyBAQCBkZWYgY29uZGl0aW9uc19mb3Jf
aGVhZGVyKGhlYWRlcik6CiAgICAgICAgICciSW5wdXRNZXRob2RTdGF0ZS5oIic6IFsiUExBVEZP
Uk0oR1RLKSIsICJQTEFURk9STShXUEUpIl0sCiAgICAgICAgICciTGF5ZXJIb3N0aW5nQ29udGV4
dC5oIic6IFsiUExBVEZPUk0oQ09DT0EpIiwgXSwKICAgICAgICAgJyJHZXN0dXJlVHlwZXMuaCIn
OiBbIlBMQVRGT1JNKElPU19GQU1JTFkpIl0sCisgICAgICAgICciV0NMYXllclRyZWVIb3N0SWRl
bnRpZmllci5oIic6IFsiVVNFKEdSQVBISUNTX0xBWUVSX1dDKSJdLAogICAgICAgICAnPFdlYkNv
cmUvTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaD4nOiBbIkVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpIl0sCiAgICAgICAgICc8V2ViQ29yZS9EYXRhRGV0ZWN0b3JUeXBlLmg+Jzog
WyJFTkFCTEUoREFUQV9ERVRFQ1RJT04pIl0sCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9EcmF3
aW5nQXJlYUluZm8uaAppbmRleCA3OWY1M2Y1M2RjZjkuLjcyMmI1ZjM0YjAwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKQEAgLTM3LDcgKzM3LDEwIEBAIGVudW0gY2xh
c3MgRHJhd2luZ0FyZWFUeXBlIDogdWludDhfdCB7CiAjZW5kaWYKICAgICBSZW1vdGVMYXllclRy
ZWUsCiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBF
UikKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljcywKKyNl
bmRpZgorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICBXQywKICNlbmRpZgogfTsKICAg
ICAKQEAgLTYzLDYgKzY2LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6
OkRyYXdpbmdBcmVhVHlwZT4gewogICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpS
ZW1vdGVMYXllclRyZWUKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRF
WFRVUkVfTUFQUEVSKQogICAgICAgICAsIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlOjpDb29yZGlu
YXRlZEdyYXBoaWNzCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgICAg
ICwgV2ViS2l0OjpEcmF3aW5nQXJlYVR5cGU6OldDCiAjZW5kaWYKICAgICA+OwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjYzOTdlODlkN2IyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdD
LmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEcmF3aW5nQXJlYVByb3h5V0MuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0RyYXdpbmdBcmVhUHJveHlXQzo6
RHJhd2luZ0FyZWFQcm94eVdDKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5LCBXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZTo6
V0MsIHdlYlBhZ2VQcm94eSwgcHJvY2VzcykKK3sKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5
V0M6OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgV2ViQ29yZTo6UmVnaW9uJiB1bnBhaW50ZWRS
ZWdpb24pCit7CisgICAgdW5wYWludGVkUmVnaW9uID0gcmVjdDsKKworICAgIGlmICghbV9iYWNr
aW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2JhY2tpbmdTdG9yZS0+cGFpbnQoY29u
dGV4dCwgcmVjdCk7CisgICAgdW5wYWludGVkUmVnaW9uLnN1YnRyYWN0KFdlYkNvcmU6OkludFJl
Y3QoeyB9LCBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQ
cm94eVdDOjpzaXplRGlkQ2hhbmdlKCkKK3sKKyAgICBkaXNjYXJkQmFja2luZ1N0b3JlKCk7Cisg
ICAgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCsrOworICAgIHNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhOjpVcGRhdGVHZW9tZXRyeShtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlELCBt
X3NpemUpKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OnVwZGF0ZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEID09IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQp
CisgICAgICAgIGluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOworICAgIHNlbmQoTWVzc2Fn
ZXM6OkRyYXdpbmdBcmVhOjpEaWRVcGRhdGUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94
eVdDOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQoreworICAgIGRpc2NhcmRCYWNraW5n
U3RvcmUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5V0M6OmluY29ycG9yYXRlVXBkYXRl
KGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgaWYgKHVwZGF0ZUluZm8udXBk
YXRlUmVjdEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9i
YWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLmVtcGxhY2UodXBkYXRlSW5mby52
aWV3U2l6ZSwgdXBkYXRlSW5mby5kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkpOwor
CisgICAgbV9iYWNraW5nU3RvcmUtPmluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOworCisg
ICAgV2ViQ29yZTo6UmVnaW9uIGRhbWFnZVJlZ2lvbjsKKyAgICBpZiAodXBkYXRlSW5mby5zY3Jv
bGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB1cGRh
dGVJbmZvLnVwZGF0ZVJlY3RzKQorICAgICAgICAgICAgZGFtYWdlUmVnaW9uLnVuaXRlKHJlY3Qp
OworICAgIH0gZWxzZQorICAgICAgICBkYW1hZ2VSZWdpb24gPSBXZWJDb3JlOjpJbnRSZWN0KHsg
fSwgbV93ZWJQYWdlUHJveHkudmlld1NpemUoKSk7CisgICAgbV93ZWJQYWdlUHJveHkuc2V0Vmll
d05lZWRzRGlzcGxheShkYW1hZ2VSZWdpb24pOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlX
Qzo6ZGlzY2FyZEJhY2tpbmdTdG9yZSgpCit7CisgICAgbV9iYWNraW5nU3RvcmUgPSBzdGQ6Om51
bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2MvRHJhd2luZ0FyZWFQcm94eVdDLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy93Yy9EcmF3aW5nQXJlYVByb3h5V0MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmExNDdjMTFjZjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3djL0RyYXdpbmdBcmVhUHJveHlXQy5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlZ2lvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdB
cmVhUHJveHlXQyBmaW5hbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKK3B1YmxpYzoKKyAg
ICBEcmF3aW5nQXJlYVByb3h5V0MoV2ViUGFnZVByb3h5JiwgV2ViUHJvY2Vzc1Byb3h5Jik7CisK
KyAgICB2b2lkIHBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpSZWdpb24mIHVucGFpbnRlZFJlZ2lvbik7
CisKK3ByaXZhdGU6CisgICAgLy8gRHJhd2luZ0FyZWFQcm94eQorICAgIHZvaWQgZGV2aWNlU2Nh
bGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNpemVEaWRDaGFuZ2Uo
KSBvdmVycmlkZTsKKyAgICAvLyBtZXNzYWdlIGhhbmRlcnMKKyAgICB2b2lkIHVwZGF0ZSh1aW50
NjRfdCwgY29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSh1aW50NjRfdCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOworCisgICAgdm9p
ZCBpbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdm9pZCBkaXNjYXJk
QmFja2luZ1N0b3JlKCk7CisKKyAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0
ZUlEIHsgMCB9OworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9y
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMjIwODk4YzEyMmZjLi5jNzk3MDZhMTI0
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAKICNpbmNs
dWRlICJEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIgorI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHlXQy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlXaW4uaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eVdp
bi5oIgpAQCAtNDcsNiArNDgsOCBAQCBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV2Vi
VmlldyYgdmlldykKIC8vIFBhZ2VDbGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCiBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdp
bmdBcmVhUHJveHkoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogeworICAgIGlmIChtX3ZpZXcu
cGFnZSgpLT5wcmVmZXJlbmNlcygpLnVzZUdQVVByb2Nlc3NGb3JXZWJHTEVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFQcm94eVdDPigqbV92aWV3LnBhZ2Uo
KSwgcHJvY2Vzcyk7CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3M+KCptX3ZpZXcucGFnZSgpLCBwcm9jZXNzKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmluZGV4IDFkZmY0Y2M2ODNlYS4uMGM3ZjQwY2I0
OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFQcm94eVdDLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCkBAIC00OTEs
MzEgKzQ5Miw0MyBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBoZGMsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fcGFnZS0+ZW5kUHJpbnRpbmcoKTsKLSAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEg
PSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcyo+KG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwb3J0IFdl
YktpdDEncyByZWN0IGNvYWxlc2NpbmcgbG9naWMgaGVyZS4KLSAgICAgICAgUmVnaW9uIHVucGFp
bnRlZFJlZ2lvbjsKKyAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKSB7CisgICAgICAgIGF1
dG8gcGFpbnRlciA9IFsmXShhdXRvIGRyYXdpbmdBcmVhKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHBvcnQgV2ViS2l0MSdzIHJlY3QgY29hbGVzY2luZyBsb2dpYyBoZXJlLgor
ICAgICAgICAgICAgUmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKICNpZiBVU0UoQ0FJUk8pCi0gICAg
ICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRl
KGhkYyk7Ci0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7
Ci0KLSAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCwgdW5wYWlu
dGVkUmVnaW9uKTsKLQotICAgICAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOwotICAgICAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0jZWxzZQotICAgICAgICBDT01QdHI8SUQz
RDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKLSAgICAgICAgSFJFU1VMVCBociA9IG1fc3dhcENo
YWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkg
ewotICAgICAgICAgICAgQmFja2luZ1N0b3JlOjpEWENvbm5lY3Rpb25zIGNvbnRleHQgeyBtX2lt
bWVkaWF0ZUNvbnRleHQuZ2V0KCksIGJhY2tCdWZmZXIuZ2V0KCkgfTsKKyAgICAgICAgICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKGhkYyk7
CisgICAgICAgICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwor
ICAgIAogICAgICAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCwg
dW5wYWludGVkUmVnaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc3dhcENoYWluLT5QcmVz
ZW50KDAsIDApOyAKKyAgICAKKyAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dCk7Cisg
ICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisjZWxzZQorICAgICAg
ICAgICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCisgICAgICAgICAgICBI
UkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0
dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCisgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgIEJhY2tpbmdTdG9yZTo6
RFhDb25uZWN0aW9ucyBjb250ZXh0IHsgbV9pbW1lZGlhdGVDb250ZXh0LmdldCgpLCBiYWNrQnVm
ZmVyLmdldCgpIH07CisgICAgICAgICAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50KGNvbnRleHQs
IGRpcnR5UmVjdCwgdW5wYWludGVkUmVnaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgICAgIG1fc3dhcENoYWluLT5QcmVzZW50KDAsIDApOyAKICNlbmRpZgotCi0gICAgICAgIGF1
dG8gdW5wYWludGVkUmVjdHMgPSB1bnBhaW50ZWRSZWdpb24ucmVjdHMoKTsKLSAgICAgICAgZm9y
IChhdXRvJiByZWN0IDogdW5wYWludGVkUmVjdHMpCi0gICAgICAgICAgICBkcmF3UGFnZUJhY2tn
cm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3QpOworICAgIAorICAgICAgICAgICAgYXV0byB1
bnBhaW50ZWRSZWN0cyA9IHVucGFpbnRlZFJlZ2lvbi5yZWN0cygpOworICAgICAgICAgICAgZm9y
IChhdXRvJiByZWN0IDogdW5wYWludGVkUmVjdHMpCisgICAgICAgICAgICAgICAgZHJhd1BhZ2VC
YWNrZ3JvdW5kKGhkYywgbV9wYWdlLmdldCgpLCByZWN0KTsKKyAgICAgICAgfTsKKyAgICAgICAg
c3dpdGNoIChtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnR5cGUoKSkgeworICAgICAgICBjYXNlIERy
YXdpbmdBcmVhVHlwZTo6V0M6CisgICAgICAgICAgICBwYWludGVyKHN0YXRpY19jYXN0PERyYXdp
bmdBcmVhUHJveHlXQyo+KG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpDb29yZGluYXRlZEdyYXBoaWNzOgor
ICAgICAgICAgICAgcGFpbnRlcihzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0
ZWRHcmFwaGljcyo+KG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3Bh
Z2UuZ2V0KCksIGRpcnR5UmVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5LmNwcAppbmRleCAzMWQ3OWY5ZjFkMzAuLjExNDIxNjZkMmUxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCkBAIC00MCw2ICs0MCwxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaD4KICNl
bmRpZgogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorI2luY2x1ZGUgIldDUGxhdGZvcm1M
YXllckdDR0wuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC02Miw2ICs2Niw5IEBAIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mCiAg
ICAgLy8gVE9ETzogV2UgbXVzdCB3YWl0IHVudGlsIGluaXRpYWxpemVkLCBiZWNhdXNlIGF0IHRo
ZSBtb21lbnQgd2UgY2Fubm90IHJlY2VpdmUgSVBDIG1lc3NhZ2VzCiAgICAgLy8gZHVyaW5nIHdh
aXQgd2hpbGUgaW4gc3luY2hyb25vdXMgc3RyZWFtIHNlbmQuIFNob3VsZCBiZSBmaXhlZCBhcyBw
YXJ0IG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTEuCiAg
ICAgd2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisg
ICAgc2V0UGxhdGZvcm1MYXllcihtYWtlVW5pcXVlPFdDUGxhdGZvcm1MYXllckdDR0w+KG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSk7CisjZW5kaWYKIH0KIAogUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVy
VHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmMzNzFkZDk4ODgzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0
UHJveHkuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldD
VXBhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3Mu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5OjpS
ZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlJiBwYWdlLCBDbGllbnQmIGNsaWVudCkK
KyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitSZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6flJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sK
KyAgICBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlv
biogUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gJmNvbnN0X2Nhc3Q8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJv
eHkmPigqdGhpcykuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9
CisKK0dQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6ZW5z
dXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVj
dGlvbikgeworICAgICAgICBhdXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgICAgIGdwdVBy
b2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CisgICAgICAgIGdwdVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXll
clRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCksICp0aGlzKTsKKyAgICAgICAgZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoCisgICAgICAgICAgICBNZXNzYWdlczo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlV0NMYXllclRyZWVIb3N0KHdjTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXIoKSwgbV9wYWdlLm5hdGl2ZVdpbmRvd0hhbmRsZSgpKSwKKyAgICAg
ICAgICAgIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5n
Rm9yU3luY1JlcGx5KTsKKyAgICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbiA9IGdwdVByb2Nl
c3NDb25uZWN0aW9uOworICAgIH0KKyAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247
Cit9CisKK3ZvaWQgUmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmRpc2Nvbm5lY3RHcHVQcm9j
ZXNzSWZOZWVkZWQoKQoreworICAgIGlmIChhdXRvIGdwdVByb2Nlc3NDb25uZWN0aW9uID0gc3Rk
OjpleGNoYW5nZShtX2dwdVByb2Nlc3NDb25uZWN0aW9uLCBudWxscHRyKSkgeworICAgICAgICBn
cHVQcm9jZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgICAgICBn
cHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VXQ0xheWVyVHJlZUhvc3Qod2NMYXllclRyZWVIb3N0
SWRlbnRpZmllcigpKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hl
bldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIH0KK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJl
ZUhvc3RQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVj
dGlvbiYgcHJldmlvdXNDb25uZWN0aW9uKQoreworICAgIHByZXZpb3VzQ29ubmVjdGlvbi5yZW1v
dmVDbGllbnQoKnRoaXMpOworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNl
aXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgd2NMYXllclRyZWVIb3N0SWRlbnRp
ZmllcigpLnRvVUludDY0KCkpOworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRy
OworfQorCit1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiB3Y0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyKCkudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlSW5mbykKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZSh1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQg
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OmRpZFVwZGF0ZSgpCit7CisgICAgbV9jbGllbnQu
ZGlkVXBkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjljZjdjZTdhOWJj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisK
KyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJXQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV0NVcGF0
ZUluZm87CisKK2NsYXNzIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5CisgICAgOiBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgor
ICAgICwgcHJpdmF0ZSBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpID0gMDsKKyAgICB9OworCisgICAg
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkoV2ViUGFnZSYsIENsaWVudCYpOworICAgIH5SZW1v
dGVXQ0xheWVyVHJlZUhvc3RQcm94eSgpOworCisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8m
Jik7CisKKyAgICB2b2lkIGRpZFVwZGF0ZSgpOworCitwcml2YXRlOgorICAgIFdDTGF5ZXJUcmVl
SG9zdElkZW50aWZpZXIgd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmllcjsgfTsKKyAgICBHUFVQcm9jZXNzQ29ubmVjdGlv
biYgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RHcHVQ
cm9jZXNzSWZOZWVkZWQoKTsKKworICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQK
KyAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24mKSBmaW5hbDsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlcgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxHUFVQ
cm9jZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKKyAgICBXQ0xheWVyVHJl
ZUhvc3RJZGVudGlmaWVyIG1fd2NMYXllclRyZWVIb3N0SWRlbnRpZmllciB7IFdDTGF5ZXJUcmVl
SG9zdElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAg
Q2xpZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NM
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi40ZjhhZjc3YTMxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5
Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKK21lc3NhZ2Vz
IC0+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIERpZFVw
ZGF0ZSgpCit9CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDTGF5ZXJUcmVlSG9z
dElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2Mv
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uMGRiYTA1ZTE1NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV0NMYXllclRyZWVIb3N0SWRlbnRpZmllclR5cGUg
eyB9OwordXNpbmcgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJH
Q0dMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hODdlMDhlODJl
MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9XQ1BsYXRmb3JtTGF5ZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdDUGxhdGZvcm1MYXllckdDR0wgOiBwdWJsaWMgV2ViQ29yZTo6
V0NQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICBXQ1BsYXRmb3JtTGF5ZXJHQ0dMKEdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6IG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgeworICAgIH0KKyAgICBHcmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXImIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcigpIHsgcmV0
dXJuIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKaW5kZXggYTUzNDQwN2QwMzY2Li5kMWQyZGI4YzBm
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5jcHAKQEAgLTQwLDYgKzQwLDkgQEAKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgIkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRH
cmFwaGljcy5oIgogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorI2luY2x1ZGUg
IkRyYXdpbmdBcmVhV0MuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpAQCAtNTcsNiArNjAsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPERyYXdp
bmdBcmVhPiBEcmF3aW5nQXJlYTo6Y3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBh
Z2UKICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVS
KQogICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpDb29yZGluYXRlZEdyYXBoaWNzOgogICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M+KHdlYlBh
Z2UsIHBhcmFtZXRlcnMpOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAg
IGNhc2UgRHJhd2luZ0FyZWFUeXBlOjpXQzoKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RHJh
d2luZ0FyZWFXQz4od2ViUGFnZSwgcGFyYW1ldGVycyk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEw
OCw2ICsxMTUsMTAgQEAgYm9vbCBEcmF3aW5nQXJlYTo6c3VwcG9ydHNHUFVQcm9jZXNzUmVuZGVy
aW5nKERyYXdpbmdBcmVhVHlwZSB0eXBlKQogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3M6CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKyAgICBjYXNlIERyYXdpbmdBcmVhVHlwZTo6V0M6CisgICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5k
ZXggNWUwYjk3NTljNmNjLi4yOWQ5OWFhZjk1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtMTM2LDYgKzEzNiwxMCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHZpZXdTaXplLCBib29sIGZsdXNoU3luY2hyb25vdXNseSwgY29uc3QgV1RGOjpNYWNoU2VuZFJp
Z2h0JiBmZW5jZVBvcnQpIHsgfQogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0Mp
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRT
aXplKSB7IH07CisjZW5kaWYKKwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNF
KEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQogICAgIHZpcnR1YWwgdm9pZCBsYXllckhv
c3REaWRGbHVzaExheWVycygpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCmluZGV4IDlkNWY2
ZGNhNmUzOC4uYjE5NmE5ZjA1ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAtNDAsNiArNDAsMTAg
QEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAgICAgQWRkVHJhbnNh
Y3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogI2VuZGlmCiAK
KyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgVXBkYXRlR2VvbWV0cnkodWludDY0X3Qg
YmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKKyNlbmRpZgor
CiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBBZGp1c3RUcmFuc2ll
bnRab29tKGRvdWJsZSBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgQ29t
bWl0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2lu
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2lu
Z0FyZWFXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5n
QXJlYVdDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE1YjY2
N2EyNTYzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVdDLmgiCisKKyNp
bmNsdWRlICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyV0MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5o
IgorI2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiVXBk
YXRlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0RyYXdpbmdBcmVhV0M6OkRyYXdpbmdBcmVhV0MoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICA6IERyYXdpbmdBcmVhKERy
YXdpbmdBcmVhVHlwZTo6V0MsIHBhcmFtZXRlcnMuZHJhd2luZ0FyZWFJZGVudGlmaWVyLCB3ZWJQ
YWdlKQorICAgICwgbV9yb290TGF5ZXJDbGllbnQod2ViUGFnZSkKKyAgICAsIG1fcmVtb3RlV0NM
YXllclRyZWVIb3N0UHJveHkobWFrZVVuaXF1ZTxSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eT4o
d2ViUGFnZSwgKnRoaXMpKQorICAgICwgbV9sYXllckZhY3RvcnkoKnRoaXMpCisgICAgLCBtX3Jv
b3RMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhp
cy0+bV9yb290TGF5ZXJDbGllbnQpKQorICAgICwgbV91cGRhdGVSZW5kZXJpbmdUaW1lcigqdGhp
cywgJkRyYXdpbmdBcmVhV0M6OnVwZGF0ZVJlbmRlcmluZykKKyAgICAsIG1fY29tbWl0UXVldWUo
V29ya1F1ZXVlOjpjcmVhdGUoIkRyYXdpbmdBcmVhV0MgQ29tbWl0UXVldWUiX3MpKQoreworICAg
IG1fcm9vdExheWVyLT5zZXROYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJkcmF3aW5nIGFy
ZWEgcm9vdCIpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IG1fcm9vdExheWVyLT5zZXRDb250ZW50c09wYXF1ZSh0cnVlKTsKKyAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7Cit9CisKK0RyYXdpbmdBcmVhV0M6On5EcmF3aW5nQXJlYVdDKCkKK3sKKyAgICB3aGls
ZSAoYXV0byBsYXllciA9IG1fbGl2ZUdyYXBoaWNzTGF5ZXJzLnJlbW92ZUhlYWQoKSkKKyAgICAg
ICAgbGF5ZXItPmNsZWFyT2JzZXJ2ZXIoKTsKK30KKworR3JhcGhpY3NMYXllckZhY3RvcnkqIERy
YXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gJm1fbGF5
ZXJGYWN0b3J5OworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnVwZGF0ZVJvb3RMYXllcnMoKQor
eworICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOworICAgIGlmIChtX2Nv
bnRlbnRMYXllcikgeworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm1fY29udGVudExheWVyKTsK
KyAgICAgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgICAgICBjaGlsZHJl
bi5hcHBlbmQoKm1fdmlld092ZXJsYXlSb290TGF5ZXIpOworICAgIH0KKyAgICBtX3Jvb3RMYXll
ci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgIHRyaWdnZXJSZW5kZXJpbmdV
cGRhdGUoKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit7CisgICAgbV9jb250ZW50TGF5ZXIgPSByb290
TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6
OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gbGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVy
cygpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4o
Ym9vbCBpc0Zyb3plbikKK3sKKyAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9PSBpc0Zy
b3plbikKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNSZW5kZXJpbmdTdXNwZW5kZWQgPSBpc0Zy
b3plbjsKKyAgICBpZiAoIW1faXNSZW5kZXJpbmdTdXNwZW5kZWQgJiYgbV9oYXNEZWZlcnJlZFJl
bmRlcmluZ1VwZGF0ZSkgeworICAgICAgICBtX2hhc0RlZmVycmVkUmVuZGVyaW5nVXBkYXRlID0g
ZmFsc2U7CisgICAgICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAgICB9Cit9CisKK3Zv
aWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlR2VvbWV0cnkodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgSW50U2l6ZSB2aWV3U2l6ZSkKK3sKKyAgICBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgPSBi
YWNraW5nU3RvcmVTdGF0ZUlEOworICAgIG1fd2ViUGFnZS5zZXRTaXplKHZpZXdTaXplKTsKKyAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKK30KKwordm9pZCBEcmF3
aW5nQXJlYVdDOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fZGlydHlSZWdpb24gPSB7IH07
CisgICAgbV9zY3JvbGxSZWN0ID0geyB9OworICAgIG1fc2Nyb2xsT2Zmc2V0ID0geyB9OworICAg
IHNldE5lZWRzRGlzcGxheUluUmVjdChtX3dlYlBhZ2UuYm91bmRzKCkpOworfQorCit2b2lkIERy
YXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQorICAgICAgICBtX3Jvb3RMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgbV9kaXJ0eVJlZ2lv
bi51bml0ZShyZWN0KTsKKyAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQg
RHJhd2luZ0FyZWFXQzo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQorICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9sbFJlY3QpOworICAg
IGVsc2UgeworICAgICAgICBpZiAoc2Nyb2xsUmVjdCAhPSBtX3Njcm9sbFJlY3QpIHsKKyAgICAg
ICAgICAgIC8vIEp1c3QgcmVwYWludCB0aGUgZW50aXJlIGN1cnJlbnQgc2Nyb2xsIHJlY3QsIHdl
J2xsIHNjcm9sbCB0aGUgbmV3IHJlY3QgaW5zdGVhZC4KKyAgICAgICAgICAgIHNldE5lZWRzRGlz
cGxheUluUmVjdChtX3Njcm9sbFJlY3QpOworICAgICAgICAgICAgbV9zY3JvbGxSZWN0ID0geyB9
OworICAgICAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07CisgICAgICAgIH0KKyAgICAgICAg
Ly8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24gdGhhdCBpcyBpbiB0aGUgc2Nyb2xs
IHJlY3QuCisgICAgICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2Vj
dChzY3JvbGxSZWN0LCBtX2RpcnR5UmVnaW9uKTsKKyAgICAgICAgaWYgKCFkaXJ0eVJlZ2lvbklu
U2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBwYXJ0cyBv
ZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgYXJlIGluc2lkZSB0aGUgc2Nyb2xsIHJlY3QuCisgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIHN1YnRyYWN0IHRoZW0gZnJvbSB0aGUgcmVnaW9uLCBtb3Zl
IHRoZW0gYW5kIHJlLWFkZCB0aGVtLgorICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbi5zdWJ0cmFj
dChzY3JvbGxSZWN0KTsKKyAgICAgICAgICAgIC8vIE1vdmUgdGhlIGRpcnR5IHBhcnRzLgorICAg
ICAgICAgICAgUmVnaW9uIG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3Qo
dHJhbnNsYXRlKGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSksIHNjcm9sbFJl
Y3QpOworICAgICAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJhY2suCisgICAgICAgICAgICBtX2Rp
cnR5UmVnaW9uLnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QpOworICAgICAgICB9
CisgICAgICAgIC8vIENvbXB1dGUgdGhlIHNjcm9sbCByZXBhaW50IHJlZ2lvbi4KKyAgICAgICAg
UmVnaW9uIHNjcm9sbFJlcGFpbnRSZWdpb24gPSBzdWJ0cmFjdChzY3JvbGxSZWN0LCB0cmFuc2xh
dGUoc2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpKTsKKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0
ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKKyAgICAgICAgbV9zY3JvbGxSZWN0ID0gc2Nyb2xsUmVj
dDsKKyAgICAgICAgbV9zY3JvbGxPZmZzZXQgKz0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHRyaWdn
ZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dHJp
Z2dlclJlbmRlcmluZ1VwZGF0ZSgpCit7CisgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5kZWQg
fHwgbV93YWl0RGlkVXBkYXRlKSB7CisgICAgICAgIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRh
dGUgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3VwZGF0ZVJlbmRl
cmluZ1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3VwZGF0ZVJlbmRl
cmluZ1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaExheWVy
SW1hZ2VCdWZmZXJzKFdDVXBhdGVJbmZvJiBpbmZvKQoreworICAgIGZvciAoYXV0byYgbGF5ZXJJ
bmZvIDogaW5mby5jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGlmIChsYXllckluZm8uY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
aW1hZ2UgPSBsYXllckluZm8uYmFja2luZ1N0b3JlLmltYWdlQnVmZmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNoZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZmx1c2hlci0+Zmx1c2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBEcmF3aW5nQXJlYVdDOjppc0NvbXBvc2l0aW5nTW9kZSgpCit7
CisgICAgcmV0dXJuIG1fY29udGVudExheWVyOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnVw
ZGF0ZVJlbmRlcmluZygpCit7CisgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5kZWQpIHsKKyAg
ICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IHRydWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWVudHJhbnQsIGUuZy4g
YSByQUYgY2FsbGJhY2sgbWF5IGZvcmNlIHJlcGFpbnQuCisgICAgaWYgKG1faW5VcGRhdGVSZW5k
ZXJpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBTZXRGb3JTY29wZTxib29sPiBjaGFuZ2UobV9p
blVwZGF0ZVJlbmRlcmluZywgdHJ1ZSk7CisKKyAgICBBU1NFUlQoIW1fd2FpdERpZFVwZGF0ZSk7
CisgICAgbV93YWl0RGlkVXBkYXRlID0gdHJ1ZTsKKworICAgIG1fd2ViUGFnZS51cGRhdGVSZW5k
ZXJpbmcoKTsKKyAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsK
KworICAgIE9wdGlvblNldDxGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZsYWdzPiBmbGFnczsKKyAg
ICBtX3dlYlBhZ2UuZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoZmxhZ3MpOworICAgIG1fd2ViUGFn
ZS5kaWRVcGRhdGVSZW5kZXJpbmcoKTsKKworICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQor
ICAgICAgICBzZW5kVXBkYXRlQUMoKTsKKyAgICBlbHNlCisgICAgICAgIHNlbmRVcGRhdGVOb25B
QygpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OnNlbmRVcGRhdGVBQygpCit7CisgICAgbV9y
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAg
IC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSByb290IGxheWVyIGlzIG5vdCBh
dHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciB0cmVlLCB3ZSBuZWVkIHRv
IGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAg
ICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoeyB9KTsK
KworICAgIG1fdXBkYXRlSW5mby5yb290TGF5ZXIgPSBtX3Jvb3RMYXllci0+cHJpbWFyeUxheWVy
SUQoKTsKKworICAgIG1fY29tbWl0UXVldWUtPmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdl
YWtQdHIoKnRoaXMpLCB1cGRhdGVJbmZvID0gc3RkOjpleGNoYW5nZShtX3VwZGF0ZUluZm8sIHsg
fSldKCkgbXV0YWJsZSB7CisgICAgICAgIGZsdXNoTGF5ZXJJbWFnZUJ1ZmZlcnModXBkYXRlSW5m
byk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBX
VEZNb3ZlKHdlYWtUaGlzKSwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyldKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIG1fcmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZShXVEZN
b3ZlKHVwZGF0ZUluZm8pKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBib29s
IHNob3VsZFBhaW50Qm91bmRzUmVjdChjb25zdCBJbnRSZWN0JiBib3VuZHMsIGNvbnN0IFZlY3Rv
cjxJbnRSZWN0LCAxPiYgcmVjdHMpCit7CisgICAgY29uc3RleHByIHNpemVfdCByZWN0VGhyZXNo
b2xkID0gMTA7CisgICAgY29uc3RleHByIGRvdWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAu
NzU7CisKKyAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4gcmVjdFRo
cmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQXR0ZW1wdCB0byBndWVzcyB3
aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSByZWdpb24gYm91bmRzIHJlY3Qgb3IgdGhl
IGluZGl2aWR1YWwgcmVjdHMuCisgICAgLy8gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIHBl
cmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhlIGJvdW5kcy4gSWYgdGhhdCB3YXN0ZWQg
c3BhY2UKKyAgICAvLyBpcyB0b28gbGFyZ2UsIHRoZW4gd2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJl
Y3QgcGFpbnRpbmcgaW5zdGVhZC4KKyAgICB1bnNpZ25lZCBib3VuZHNBcmVhID0gYm91bmRzLndp
ZHRoKCkgKiBib3VuZHMuaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcmVjdHNBcmVhID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQorICAgICAgICByZWN0
c0FyZWEgKz0gcmVjdHNbaV0ud2lkdGgoKSAqIHJlY3RzW2ldLmhlaWdodCgpOworCisgICAgZG91
YmxlIHdhc3RlZFNwYWNlID0gMSAtIChzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3RzQXJlYSkgLyBi
b3VuZHNBcmVhKTsKKyAgICByZXR1cm4gd2FzdGVkU3BhY2UgPD0gd2FzdGVkU3BhY2VUaHJlc2hv
bGQ7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZU5vbkFDKCkKK3sKKyAgICBp
ZiAobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGlkVXBkYXRlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgSW50UmVjdCBib3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJv
dW5kcygpOworICAgIEFTU0VSVChtX3dlYlBhZ2UuYm91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7
CisgICAgSW50U2l6ZSBiaXRtYXBTaXplID0gYm91bmRzLnNpemUoKTsKKyAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3Rvcigp
OworICAgIGJpdG1hcFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgYXV0byBp
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyKGJpdG1hcFNpemUpOworICAgIGF1dG8gcmVjdHMgPSBt
X2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgaWYgKHNob3VsZFBhaW50Qm91bmRzUmVjdChib3Vu
ZHMsIHJlY3RzKSkgeworICAgICAgICByZWN0cy5jbGVhcigpOworICAgICAgICByZWN0cy5hcHBl
bmQoYm91bmRzKTsKKyAgICB9CisgICAgbV9kaXJ0eVJlZ2lvbiA9IHsgfTsKKworICAgIFVwZGF0
ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNp
emUoKTsKKyAgICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQ
YWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91
bmRzID0gYm91bmRzOworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMgPSByZWN0czsKKyAgICB1
cGRhdGVJbmZvLnNjcm9sbFJlY3QgPSBtX3Njcm9sbFJlY3Q7CisgICAgdXBkYXRlSW5mby5zY3Jv
bGxPZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsKKyAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAg
bV9zY3JvbGxPZmZzZXQgPSB7IH07CisKKyAgICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBpbWFn
ZS0+Y29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9y
KGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1ib3Vu
ZHMueCgpLCAtYm91bmRzLnkoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMp
CisgICAgICAgIG1fd2ViUGFnZS5kcmF3UmVjdChpbWFnZS0+Y29udGV4dCgpLCByZWN0KTsKKyAg
ICBpbWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisKKyAgICBtX2NvbW1pdFF1ZXVl
LT5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc3RhdGVJRCA9IG1f
YmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGlt
YWdlXSgpIG11dGFibGUgeworICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0
ZUZsdXNoZXIoKSkKKyAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7CisgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwg
c3RhdGVJRCwgdXBkYXRlSW5mbyA9IFdURk1vdmUodXBkYXRlSW5mbyksIGltYWdlXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBpZiAoc3RhdGVJRCAhPSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpIHsKKyAg
ICAgICAgICAgICAgICBkaWRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHN0YXRpY19jYXN0PFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQmPigqaW1hZ2UtPmVuc3VyZUJhY2tlbmRD
cmVhdGVkKCkpLmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAgICAg
dXBkYXRlSW5mby5iaXRtYXBIYW5kbGUgPSBzdGQ6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZT4oV1RGTW92ZShoYW5kbGUpKTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhUHJveHk6OlVwZGF0ZShzdGF0ZUlELCBXVEZNb3ZlKHVwZGF0ZUluZm8pKSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmdyYXBoaWNzTGF5ZXJBZGRl
ZChHcmFwaGljc0xheWVyV0MmIGxheWVyKQoreworICAgIG1fbGl2ZUdyYXBoaWNzTGF5ZXJzLmFw
cGVuZCgmbGF5ZXIpOworICAgIG1fdXBkYXRlSW5mby5hZGRlZExheWVycy5hcHBlbmQobGF5ZXIu
cHJpbWFyeUxheWVySUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Z3JhcGhpY3NMYXll
clJlbW92ZWQoR3JhcGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICBtX2xpdmVHcmFwaGljc0xh
eWVycy5yZW1vdmUoJmxheWVyKTsKKyAgICBtX3VwZGF0ZUluZm8ucmVtb3ZlZExheWVycy5hcHBl
bmQobGF5ZXIucHJpbWFyeUxheWVySUQoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6Y29t
bWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXllclVwYXRlSW5mbyYmIGluZm8pCit7CisgICAgbV91cGRh
dGVJbmZvLmNoYW5nZWRMYXllcnMuYXBwZW5kKFdURk1vdmUoaW5mbykpOworfQorCitSZWZQdHI8
SW1hZ2VCdWZmZXI+IERyYXdpbmdBcmVhV0M6OmNyZWF0ZUltYWdlQnVmZmVyKEZsb2F0U2l6ZSBz
aXplKQoreworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRVc2VSZW1vdGVS
ZW5kZXJpbmdGb3IoUmVuZGVyaW5nUHVycG9zZTo6RE9NKSkKKyAgICAgICAgcmV0dXJuIG1fd2Vi
UGFnZS5lbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKS5jcmVhdGVJbWFnZUJ1ZmZl
cihzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICByZXR1cm4gQ29uY3JldGVJ
bWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjo6Y3Jl
YXRlKHNpemUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIG51bGxwdHIpOworfQorCit2b2lkIERyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSgpCit7
CisgICAgbV93YWl0RGlkVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKG1faGFzRGVmZXJyZWRSZW5k
ZXJpbmdVcGRhdGUpIHsKKyAgICAgICAgbV9oYXNEZWZlcnJlZFJlbmRlcmluZ1VwZGF0ZSA9IGZh
bHNlOworICAgICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgfQorfQorCitEcmF3
aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OlJvb3RMYXllckNsaWVudChXZWJQYWdlJiB3ZWJQ
YWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCit7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFX
Qzo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdy
YXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNv
bnRleHQuY2xpcChyZWN0VG9QYWludCk7CisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWlu
dCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmbG9hdCBEcmF3aW5nQXJlYVdDOjpS
b290TGF5ZXJDbGllbnQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvRHJhd2luZ0FyZWFXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvRHJhd2luZ0FyZWFXQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uODcyMTcyZGYyYjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyV0MuaCIKKyNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eS5oIgorI2luY2x1ZGUgIldDTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyRmFjdG9yeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdBcmVhV0MgZmluYWwKKyAgICA6IHB1Ymxp
YyBEcmF3aW5nQXJlYQorICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJXQzo6T2JzZXJ2ZXIKKyAg
ICAsIHB1YmxpYyBSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTo6Q2xpZW50IHsKK3B1YmxpYzoK
KyAgICBEcmF3aW5nQXJlYVdDKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJik7CisgICAgfkRyYXdpbmdBcmVhV0MoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICAv
LyBEcmF3aW5nQXJlYQorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGlj
c0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGZvcmNlUmVwYWludEFzeW5jKFdlYlBhZ2UmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdHJpZ2dlclJlbmRlcmluZ1VwZGF0
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNv
cmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TGF5ZXJU
cmVlU3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKKyAgICBib29sIGxheWVyVHJlZVN0YXRl
SXNGcm96ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzUmVuZGVyaW5nU3VzcGVuZGVk
OyB9CisgICAgdm9pZCB1cGRhdGVHZW9tZXRyeSh1aW50NjRfdCwgV2ViQ29yZTo6SW50U2l6ZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIC8vIEdyYXBoaWNz
TGF5ZXJXQzo6T2JzZXJ2ZXIKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRlZChHcmFwaGljc0xh
eWVyV0MmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdyYXBoaWNzTGF5ZXJSZW1vdmVkKEdyYXBoaWNz
TGF5ZXJXQyYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0TGF5ZXJVcGF0ZUluZm8oV0NMYXll
clVwYXRlSW5mbyYmKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+
IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSkgb3ZlcnJpZGU7CisgICAgLy8g
UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk6OkNsaWVudAorICAgIHZvaWQgZGlkVXBkYXRlKCkg
b3ZlcnJpZGU7CisKKyAgICBib29sIGlzQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgdm9pZCB1cGRh
dGVSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHNlbmRVcGRhdGVBQygpOworICAgIHZvaWQgc2VuZFVw
ZGF0ZU5vbkFDKCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CisKKyAgICBjbGFzcyBS
b290TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYpOworICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlOworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgfTsKKworICAgIFJvb3RMYXllckNsaWVu
dCBtX3Jvb3RMYXllckNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NMYXllclRy
ZWVIb3N0UHJveHk+IG1fcmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk7CisgICAgV0NMYXllckZh
Y3RvcnkgbV9sYXllckZhY3Rvcnk7CisgICAgRG91Ymx5TGlua2VkTGlzdDxHcmFwaGljc0xheWVy
V0M+IG1fbGl2ZUdyYXBoaWNzTGF5ZXJzOworICAgIFdlYkNvcmU6OlRpbWVyIG1fdXBkYXRlUmVu
ZGVyaW5nVGltZXI7CisgICAgYm9vbCBtX2lzUmVuZGVyaW5nU3VzcGVuZGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1faGFzRGVmZXJyZWRSZW5kZXJpbmdVcGRhdGUgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pblVwZGF0ZVJlbmRlcmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dhaXREaWRVcGRh
dGUgeyBmYWxzZSB9OworICAgIFdDVXBhdGVJbmZvIG1fdXBkYXRlSW5mbzsKKyAgICBSZWY8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fY29udGVudExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIFJlZjxXb3JrUXVldWU+IG1fY29t
bWl0UXVldWU7CisgICAgaW50NjRfdCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisgICAg
V2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Nj
cm9sbFJlY3Q7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi40NDE3MjRkYzc5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0wLDAg
KzEsNDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKKwor
I2luY2x1ZGUgIldDUGxhdGZvcm1MYXllckdDR0wuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR3JhcGhpY3NMYXllcldDOjpHcmFwaGljc0xheWVy
V0MoVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwgT2JzZXJ2ZXIm
IG9ic2VydmVyKQorICAgIDogR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKKyAgICAs
IG1fb2JzZXJ2ZXIoJm9ic2VydmVyKQoreworICAgIG1fb2JzZXJ2ZXItPmdyYXBoaWNzTGF5ZXJB
ZGRlZCgqdGhpcyk7Cit9CisKK0dyYXBoaWNzTGF5ZXJXQzo6fkdyYXBoaWNzTGF5ZXJXQygpCit7
CisgICAgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgaWYgKG1fb2JzZXJ2ZXIpCisgICAgICAgIG1f
b2JzZXJ2ZXItPmdyYXBoaWNzTGF5ZXJSZW1vdmVkKCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIEdyYXBoaWNzTGF5ZXJXQzo6Z2VuZXJhdGVMYXllcklEKCkKK3sK
KyAgICAvLyAwIGFuZCBtYXggY2FuJ3QgYmUgdXNlZCBmb3IgaGFzaCBrZXlzCisgICAgc3RhdGlj
IEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCA9IDE7CisgICAgcmV0dXJuIGlkKys7
Cit9CisKK0dyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBHcmFwaGljc0xheWVyV0M6OnBy
aW1hcnlMYXllcklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllcklEOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29u
dGVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7CisgICAgYWRkUmVwYWludFJlY3QoeyB7IH0sIG1f
c2l6ZSB9KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIFNob3VsZENsaXBUb0xheWVyKQorewor
ICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsKKyAgICBhZGRSZXBh
aW50UmVjdChyZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICAvLyBGb3IgZXhhbXBsZSwgaWYgV2ViR0wgY2FudmFzIGNoYW5n
ZWQsIGl0IG5lZWRzIGZsdXNoIHRvIGRpc3BsYXkuCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKHsgfSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0b3I8
UmVmPEdyYXBoaWNzTGF5ZXI+PiYmIGNoaWxkcmVuKQoreworICAgIGJvb2wgY2hpbGRyZW5DaGFu
Z2VkID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAg
IGlmIChjaGlsZHJlbkNoYW5nZWQpCisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7CisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVyPiYmIGNo
aWxkTGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZExh
eWVyKSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxk
cmVuKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmFkZENoaWxkQXRJbmRleChSZWY8R3Jh
cGhpY3NMYXllcj4mJiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBdEluZGV4KFdURk1vdmUoY2hpbGRMYXllciksIGluZGV4KTsKKyAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6YWRkQ2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiBjaGls
ZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQmVsb3coV1RGTW92ZShjaGlsZExheWVyKSwgc2libGluZyk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OmFkZENoaWxkQWJvdmUoUmVmPEdyYXBoaWNzTGF5ZXI+JiYgY2hpbGRMYXll
ciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGls
ZEFib3ZlKFdURk1vdmUoY2hpbGRMYXllciksIHNpYmxpbmcpOworICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7Cit9CisKK2Jvb2wgR3JhcGhpY3NM
YXllcldDOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIFJlZjxHcmFwaGlj
c0xheWVyPiYmIG5ld0NoaWxkKQoreworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hp
bGQob2xkQ2hpbGQsIFdURk1vdmUobmV3Q2hpbGQpKSkgeworICAgICAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0aWNf
Y2FzdDxHcmFwaGljc0xheWVyV0MqPihtX3BhcmVudCktPm5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbik7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJv
bVBhcmVudCgpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TWFza0xheWVyKFJlZlB0
cjxHcmFwaGljc0xheWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX21hc2tMYXll
cikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihXVEZN
b3ZlKGxheWVyKSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6
Ok1hc2tMYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRSZXBsaWNhdGVkTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1fcmVwbGljYXRl
ZExheWVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZExheWVyKGxheWVyKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFJlcGxpY2F0
ZWRCeUxheWVyKFJlZlB0cjxHcmFwaGljc0xheWVyPiYmIGxheWVyKQoreworICAgIGlmIChsYXll
ciA9PSBtX3JlcGxpY2FMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFJlcGxpY2F0ZWRCeUxheWVyKFdURk1vdmUobGF5ZXIpKTsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyV0M6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAg
IGlmIChwb2ludCA9PSBtX3Bvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0UG9zaXRpb24ocG9pbnQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9
PSBtX2FuY2hvclBvaW50KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
QW5jaG9yUG9pbnQocG9pbnQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAg
IHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luKQor
eworICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRCb3VuZHNPcmlnaW4ob3JpZ2luKTsKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJXQzo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQor
eworICAgIGlmICh0ID09IHRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAg
aWYgKHQgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOworICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllcldDOjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0UHJlc2VydmVzM0QodmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpQcmVzZXJ2ZXMzRCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRN
YXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tzVG9Cb3Vu
ZHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3Vu
ZHModmFsdWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpN
YXNrc1RvQm91bmRzKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE9wYWNpdHkoZmxv
YXQgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOworICAgIG5vdGVMYXllclBy
b3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBjb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCh2YWx1ZSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzUmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllcldDOjpzZXRDb250ZW50c0NsaXBwaW5nUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNDbGlwcGluZ1JlY3QoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KHZh
bHVlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6Q29udGVu
dHNDbGlwcGluZ1JlY3QpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3NDb250
ZW50KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZhbHVlKTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3Jl
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldENvbnRlbnRzVmlzaWJsZShib29sIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c0FyZVZpc2libGUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSh2YWx1ZSk7Cisg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzVmlzaWJs
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9v
bCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFs
dWUpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZmFj
ZVZpc2liaWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNUb1Nv
bGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChjb2xvciA9PSBtX3NvbGlk
Q29sb3IpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NvbGlkQ29sb3IgPSBjb2xvcjsKKyAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6U29saWRDb2xvcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyLCBDb250ZW50c0xheWVyUHVycG9zZSkKK3sKKyAgICBpZiAo
bV9wbGF0Zm9ybUxheWVyID09IHBsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxheWVyOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKTsKK30KKworYm9vbCBHcmFwaGljc0xh
eWVyV0M6OnVzZXNDb250ZW50c0xheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0U2hvd0RlYnVnQm9yZGVyKGJv
b2wgc2hvdykKK3sKKyAgICBpZiAoaXNTaG93aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cp
OworICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKK3sK
KyAgICBtX2RlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKKyAgICBtX2RlYnVnQm9yZGVyV2lkdGgg
PSB3aWR0aDsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RGVi
dWdWaXN1YWxzKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldFNob3dSZXBhaW50Q291
bnRlcihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgPT0g
c2hvdykKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50
Q291bnRlcihzaG93KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5n
ZTo6UmVwYWludENvdW50KTsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGlmICghZmlsdGVycy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbHRl
ck9wZXJhdGlvbiA6IGZpbHRlcnMub3BlcmF0aW9ucygpKSB7CisgICAgICAgIGlmIChmaWx0ZXJP
cGVyYXRpb24tPnR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NMYXllcldDOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
Cit7CisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZChmaWx0ZXJzKTsKKyAgICBpZiAoR3JhcGhpY3NMYXllcjo6ZmlsdGVycygpID09IGZpbHRlcnMp
CisgICAgICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOworCisgICAgaWYgKGNhbkNvbXBv
c2l0ZUZpbHRlcnMpIHsKKyAgICAgICAgaWYgKCFHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGZp
bHRlcnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoR3JhcGhp
Y3NMYXllcjo6ZmlsdGVycygpLnNpemUoKSkKKyAgICAgICAgY2xlYXJGaWx0ZXJzKCk7CisKKyAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6RmlsdGVycyk7CisgICAg
cmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcldDOjpz
ZXRCYWNrZHJvcEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAg
ICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRl
cnMpOworICAgIGlmIChtX2JhY2tkcm9wRmlsdGVycyA9PSBmaWx0ZXJzKQorICAgICAgICByZXR1
cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKKyAgICBpZiAoY2FuQ29tcG9zaXRlRmlsdGVycykKKyAg
ICAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2Ryb3BGaWx0ZXJzKGZpbHRlcnMpOworICAgIGVs
c2UKKyAgICAgICAgY2xlYXJCYWNrZHJvcEZpbHRlcnMoKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKTsKKyAgICByZXR1cm4gY2Fu
Q29tcG9zaXRlRmlsdGVyczsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldEJhY2tkcm9w
RmlsdGVyc1JlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYmFja2Ryb3BGaWx0ZXJzUmVjdCkK
K3sKKyAgICBpZiAobV9iYWNrZHJvcEZpbHRlcnNSZWN0ID09IGJhY2tkcm9wRmlsdGVyc1JlY3Qp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZHJvcEZpbHRlcnNS
ZWN0KGJhY2tkcm9wRmlsdGVyc1JlY3QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChX
Q0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFn
cykKK3sKKyAgICBpZiAoYmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJv
b2wgbmVlZHNGbHVzaCA9ICFtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBtX3VuY29tbWl0dGVk
Q2hhbmdlcy5hZGQoZmxhZ3MpOworICAgIGlmIChuZWVkc0ZsdXNoKQorICAgICAgICBjbGllbnQo
KS5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
YXV0byogbWFzayA9IG1hc2tMYXllcigpKQorICAgICAgICBtYXNrLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKGF1dG8qIHJlcGxpY2EgPSByZXBsaWNh
TGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOworICAgIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
KyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgY2hpbGQtPmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQoreworICAgIGlmICghbV91bmNvbW1p
dHRlZENoYW5nZXMpCisgICAgICAgIHJldHVybjsKKyAgICBXQ0xheWVyVXBhdGVJbmZvIHVwZGF0
ZTsKKyAgICB1cGRhdGUuaWQgPSBwcmltYXJ5TGF5ZXJJRCgpOworICAgIHVwZGF0ZS5jaGFuZ2Vz
ID0gc3RkOjpleGNoYW5nZShtX3VuY29tbWl0dGVkQ2hhbmdlcywgeyB9KTsKKyAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICB1cGRhdGUu
Y2hpbGRyZW4gPSBXVEY6Om1hcChjaGlsZHJlbigpLCBbXShhdXRvJiBsYXllcikgeworICAgICAg
ICAgICAgcmV0dXJuIGxheWVyLT5wcmltYXJ5TGF5ZXJJRCgpOworICAgICAgICB9KTsKKyAgICB9
CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza0xheWVyKSB7Cisg
ICAgICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZS5tYXNrTGF5ZXIgPSBt
YXNrTGF5ZXIoKS0+cHJpbWFyeUxheWVySUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dXBkYXRlLm1hc2tMYXllciA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UmVwbGljYUxheWVyKSB7CisgICAgICAgIGlmIChyZXBs
aWNhTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZS5yZXBsaWNhTGF5ZXIgPSByZXBsaWNhTGF5
ZXIoKS0+cHJpbWFyeUxheWVySUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRl
LnJlcGxpY2FMYXllciA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgdXBkYXRlLnBvc2l0aW9u
ID0gcG9zaXRpb24oKTsKKyAgICAgICAgdXBkYXRlLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQo
KTsKKyAgICAgICAgdXBkYXRlLnNpemUgPSBzaXplKCk7CisgICAgICAgIHVwZGF0ZS5ib3VuZHNP
cmlnaW4gPSBib3VuZHNPcmlnaW4oKTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpCisgICAgICAgIHVwZGF0ZS5wcmVzZXJ2ZXMzRCA9
IHByZXNlcnZlczNEKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q29udGVudHNSZWN0KQorICAgICAgICB1cGRhdGUuY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0
KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlw
cGluZ1JlY3QpCisgICAgICAgIHVwZGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCA9IGNvbnRlbnRz
Q2xpcHBpbmdSZWN0KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
Q29udGVudHNWaXNpYmxlKQorICAgICAgICB1cGRhdGUuY29udGVudHNWaXNpYmxlID0gY29udGVu
dHNBcmVWaXNpYmxlKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICB1cGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0g
YmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6TWFza3NUb0JvdW5kcykKKyAgICAgICAgdXBkYXRlLm1hc2tzVG9Cb3VuZHMgPSBtYXNr
c1RvQm91bmRzKCk7CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFj
a2luZ1N0b3JlKSB7CisgICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZp
c2libGUoKSAmJiAhc2l6ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBpbWFnZSA9
IG1fb2JzZXJ2ZXItPmNyZWF0ZUltYWdlQnVmZmVyKHNpemUoKSk7CisgICAgICAgICAgICBGbG9h
dFJlY3QgY2xpcFJlY3QgPSB7IHsgfSwgc2l6ZSgpIH07CisgICAgICAgICAgICBwYWludEdyYXBo
aWNzTGF5ZXJDb250ZW50cyhpbWFnZS0+Y29udGV4dCgpLCBjbGlwUmVjdCk7CisgICAgICAgICAg
ICBpbWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisgICAgICAgICAgICB1cGRhdGUu
YmFja2luZ1N0b3JlLnNldEltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKworICAgICAgICAg
ICAgaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgICAgICAgICB1cGRhdGUuY2hhbmdlcy5h
ZGQoV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICB1
cGRhdGUuc29saWRDb2xvciA9IG1fc29saWRDb2xvcjsKKyAgICBpZiAodXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpEZWJ1Z1Zpc3VhbHMpIHsKKyAgICAgICAgdXBkYXRlLnNob3dEZWJ1
Z0JvcmRlciA9IGlzU2hvd2luZ0RlYnVnQm9yZGVyKCk7CisgICAgICAgIHVwZGF0ZS5kZWJ1Z0Jv
cmRlckNvbG9yID0gbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgICAgICB1cGRhdGUuZGVidWdCb3Jk
ZXJXaWR0aCA9IG1fZGVidWdCb3JkZXJXaWR0aDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KSB7CisgICAgICAgIHVwZGF0ZS5zaG93
UmVwYWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOworICAgICAgICB1cGRh
dGUucmVwYWludENvdW50ID0gcmVwYWludENvdW50KCk7CisgICAgfQorICAgIGlmICh1cGRhdGUu
Y2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAgICAgIHVwZGF0ZS5vcGFjaXR5
ID0gb3BhY2l0eSgpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRy
YW5zZm9ybSkKKyAgICAgICAgdXBkYXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKQorICAg
ICAgICB1cGRhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAg
IGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpCisgICAgICAgIHVw
ZGF0ZS5maWx0ZXJzID0gZmlsdGVycygpOworICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycykgeworICAgICAgICB1cGRhdGUuYmFja2Ryb3BGaWx0
ZXJzID0gYmFja2Ryb3BGaWx0ZXJzKCk7CisgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNS
ZWN0ID0gYmFja2Ryb3BGaWx0ZXJzUmVjdCgpOworICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKSB7CisgICAgICAgIGlmIChtX3BsYXRm
b3JtTGF5ZXIpCisgICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPmdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcigpLnRvVUludDY0KCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSAwOworICAgIH0K
KyAgICBtX29ic2VydmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5hYjVlYzQ3MDkxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaApAQCAtMCww
ICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdy
YXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyLCBwdWJs
aWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPiB7CitwdWJsaWM6CisgICAg
c3RydWN0IE9ic2VydmVyIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdyYXBoaWNzTGF5ZXJBZGRl
ZChHcmFwaGljc0xheWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBncmFwaGljc0xh
eWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
b21taXRMYXllclVwYXRlSW5mbyhXQ0xheWVyVXBhdGVJbmZvJiYpID0gMDsKKyAgICAgICAgdmly
dHVhbCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNv
cmU6OkZsb2F0U2l6ZSkgPSAwOworICAgIH07CisKKyAgICBHcmFwaGljc0xheWVyV0MoVHlwZSBs
YXllclR5cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmLCBPYnNlcnZlciYpOworICAg
IH5HcmFwaGljc0xheWVyV0MoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJPYnNlcnZlcigp
IHsgbV9vYnNlcnZlciA9IG51bGxwdHI7IH0KKworICAgIC8vIEdyYXBoaWNzTGF5ZXIKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgcHJpbWFyeUxheWVySUQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFNo
b3VsZENsaXBUb0xheWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNw
bGF5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNz
TGF5ZXI+PiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlZjxHcmFwaGljc0xheWVy
PiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQXRJbmRleChSZWY8R3JhcGhpY3NMYXll
cj4mJiwgaW50IGluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkQWJvdmUoUmVmPEdy
YXBoaWNzTGF5ZXI+JiYsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpIG92ZXJyaWRlOworICAgIHZv
aWQgYWRkQ2hpbGRCZWxvdyhSZWY8R3JhcGhpY3NMYXllcj4mJiwgR3JhcGhpY3NMYXllciogc2li
bGluZykgb3ZlcnJpZGU7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xk
Q2hpbGQsIFJlZjxHcmFwaGljc0xheWVyPiYmIG5ld0NoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlbW92ZUZyb21QYXJlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihSZWZQ
dHI8R3JhcGhpY3NMYXllcj4mJik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoUmVmUHRyPEdyYXBoaWNz
TGF5ZXI+JiYpOworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludDNEJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q2hp
bGRyZW5UcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0TWFza3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNDbGlwcGluZ1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RHJh
d3NDb250ZW50KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNWaXNpYmxlKGJv
b2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKFBsYXRm
b3JtTGF5ZXIqLCBDb250ZW50c0xheWVyUHVycG9zZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91
bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHVzZXNDb250ZW50c0xheWVyKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IHdpZHRoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBvdmVycmlkZTsK
KyAgICBib29sIHNldEZpbHRlcnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIG92
ZXJyaWRlOworICAgIGJvb2wgc2V0QmFja2Ryb3BGaWx0ZXJzKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1JlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1
c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92
ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPik7CisKKyAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIGdlbmVyYXRlTGF5ZXJJRCgpOworCisgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldDPjsKKworICAgIEdyYXBoaWNz
TGF5ZXJXQyogbV9wcmV2OworICAgIEdyYXBoaWNzTGF5ZXJXQyogbV9uZXh0OworICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVySUQgeyBnZW5lcmF0ZUxh
eWVySUQoKSB9OworICAgIE9ic2VydmVyKiBtX29ic2VydmVyOworICAgIFBsYXRmb3JtTGF5ZXIq
IG1fcGxhdGZvcm1MYXllciB7IG51bGxwdHIgfTsKKyAgICBXZWJDb3JlOjpDb2xvciBtX3NvbGlk
Q29sb3I7CisgICAgV2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgIE9wdGlv
blNldDxXQ0xheWVyQ2hhbmdlPiBtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBmbG9hdCBtX2Rl
YnVnQm9yZGVyV2lkdGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0JhY2tpbmdTdG9yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzRmNTAwMmY1NGE0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NC
YWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXQ0JhY2tpbmdTdG9yZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgV0NCYWNraW5nU3RvcmUoKSB7IH0KKyAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+JiYgaW1hZ2UpIHsg
bV9pbWFnZUJ1ZmZlciA9IFdURk1vdmUoaW1hZ2UpOyB9CisgICAgU2hhcmVhYmxlQml0bWFwKiBi
aXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcC5nZXQoKTsgfQorCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgYm9vbCBoYXNJbWFnZUJ1ZmZlciA9IG1faW1hZ2VCdWZmZXI7CisgICAg
ICAgIGVuY29kZXIgPDwgaGFzSW1hZ2VCdWZmZXI7CisgICAgICAgIGlmIChoYXNJbWFnZUJ1ZmZl
cikgeworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSBzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kJj4oKm1faW1hZ2VCdWZmZXItPmVuc3VyZUJhY2tl
bmRDcmVhdGVkKCkpLmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpOworICAgICAgICAg
ICAgZW5jb2RlciA8PCBoYW5kbGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdDQmFja2luZ1N0b3JlJiByZXN1bHQpCisgICAgeworICAgICAg
ICBib29sIGhhc0ltYWdlQnVmZmVyOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0lt
YWdlQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGhhc0lt
YWdlQnVmZmVyKSB7CisgICAgICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5tX2JpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKHN0ZDo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVy
RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVy
RmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YjU2
Njg3YjJiODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NMYXllckZhY3RvcnkuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitXQ0xheWVyRmFjdG9yeTo6V0NMYXllckZhY3RvcnkoR3Jh
cGhpY3NMYXllcldDOjpPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2Vy
dmVyKQoreworfQorCitSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gV0NMYXllckZhY3Rvcnk6
OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSBsYXllclR5
cGUsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBHcmFwaGljc0xheWVyV0MobGF5ZXJUeXBlLCBjbGllbnQsIG1fb2JzZXJ2
ZXIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ0xheWVyRmFjdG9yeS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIxMmQyYmU1MTFiOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDTGF5ZXJGYWN0b3J5LmgKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXJXQy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3Rv
cnkuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDTGF5ZXJGYWN0b3J5IGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBX
Q0xheWVyRmFjdG9yeShHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyJik7CisKK3ByaXZhdGU6Cisg
ICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICBSZWY8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpU
eXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3ZlcnJpZGU7CisKKyAgICBHcmFw
aGljc0xheWVyV0M6Ok9ic2VydmVyJiBtX29ic2VydmVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9X
Q1VwYXRlSW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0
ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ5NGM2ZjA1
OGVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L3djL1dDVXBhdGVJbmZvLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXQ0JhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgor
I2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBX
Q0xheWVyQ2hhbmdlIDogdWludDMyX3QgeworICAgIENoaWxkcmVuICAgICAgICAgICAgICAgID0g
MSA8PCAgMCwKKyAgICBNYXNrTGF5ZXIgICAgICAgICAgICAgICA9IDEgPDwgIDEsCisgICAgUmVw
bGljYUxheWVyICAgICAgICAgICAgPSAxIDw8ICAyLAorICAgIEdlb21ldHJ5ICAgICAgICAgICAg
ICAgID0gMSA8PCAgMywKKyAgICBQcmVzZXJ2ZXMzRCAgICAgICAgICAgICA9IDEgPDwgIDQsCisg
ICAgQ29udGVudHNWaXNpYmxlICAgICAgICAgPSAxIDw8ICA1LAorICAgIEJhY2tmYWNlVmlzaWJp
bGl0eSAgICAgID0gMSA8PCAgNiwKKyAgICBNYXNrc1RvQm91bmRzICAgICAgICAgICA9IDEgPDwg
IDcsCisgICAgU29saWRDb2xvciAgICAgICAgICAgICAgPSAxIDw8ICA4LAorICAgIERlYnVnVmlz
dWFscyAgICAgICAgICAgID0gMSA8PCAgOSwKKyAgICBSZXBhaW50Q291bnQgICAgICAgICAgICA9
IDEgPDwgMTAsCisgICAgQ29udGVudHNSZWN0ICAgICAgICAgICAgPSAxIDw8IDExLAorICAgIENv
bnRlbnRzQ2xpcHBpbmdSZWN0ICAgID0gMSA8PCAxMiwKKyAgICBPcGFjaXR5ICAgICAgICAgICAg
ICAgICA9IDEgPDwgMTMsCisgICAgQmFja2luZ1N0b3JlICAgICAgICAgICAgPSAxIDw8IDE0LAor
ICAgIFRyYW5zZm9ybSAgICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICBDaGlsZHJlblRyYW5z
Zm9ybSAgICAgICA9IDEgPDwgMTYsCisgICAgRmlsdGVycyAgICAgICAgICAgICAgICAgPSAxIDw8
IDE3LAorICAgIEJhY2tkcm9wRmlsdGVycyAgICAgICAgID0gMSA8PCAxOCwKKyAgICBQbGF0Zm9y
bUxheWVyICAgICAgICAgICA9IDEgPDwgMTksCit9OworCitzdHJ1Y3QgV0NMYXllclVwYXRlSW5m
byB7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkOworICAg
IE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBjaGFuZ2VzOworICAgIFZlY3RvcjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IGNoaWxkcmVuOworICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtYXNrTGF5ZXI7Cisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+
IHJlcGxpY2FMYXllcjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uOworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUg
c2l6ZTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJvdW5kc09yaWdpbjsKKyAgICBib29sIG1h
c2tzVG9Cb3VuZHM7CisgICAgYm9vbCBzaG93RGVidWdCb3JkZXI7CisgICAgYm9vbCBzaG93UmVw
YWludENvdW50ZXI7CisgICAgYm9vbCBjb250ZW50c1Zpc2libGU7CisgICAgYm9vbCBiYWNrZmFj
ZVZpc2liaWxpdHk7CisgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICBXZWJDb3JlOjpDb2xvciBz
b2xpZENvbG9yOworICAgIFdlYkNvcmU6OkNvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxv
YXQgb3BhY2l0eTsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworICAgIGludCByZXBhaW50
Q291bnQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBXQ0JhY2tp
bmdTdG9yZSBiYWNraW5nU3RvcmU7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJh
bnNmb3JtOworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBXZWJD
b3JlOjpGaWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9wRmlsdGVyczsKKyAgICBXZWJDb3JlOjpGbG9h
dFJvdW5kZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCBjb250ZW50c0NsaXBwaW5nUmVjdDsKKyAgICB1aW50NjRfdCBncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXI7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyIDw8
IGlkOworICAgICAgICBlbmNvZGVyIDw8IGNoYW5nZXM7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVu
OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllcikKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgbWFza0xheWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcmVwbGljYUxh
eWVyOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Okdlb21ldHJ5KQorICAg
ICAgICAgICAgZW5jb2RlciA8PCBwb3NpdGlvbiA8PCBhbmNob3JQb2ludCA8PCBzaXplIDw8IGJv
dW5kc09yaWdpbjsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQcmVzZXJ2
ZXMzRCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcHJlc2VydmVzM0Q7CisgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBjb250ZW50c1Zpc2libGU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6QmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZmFj
ZVZpc2liaWxpdHk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NU
b0JvdW5kcykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgbWFza3NUb0JvdW5kczsKKyAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBzb2xpZENvbG9yOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkRlYnVnVmlzdWFscykKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc2hvd0RlYnVnQm9yZGVyIDw8
IGRlYnVnQm9yZGVyQ29sb3IgPDwgZGVidWdCb3JkZXJXaWR0aDsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpCisgICAgICAgICAgICBlbmNvZGVyIDw8
IHNob3dSZXBhaW50Q291bnRlciA8PCByZXBhaW50Q291bnQ7CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0KQorICAgICAgICAgICAgZW5jb2RlciA8PCBj
b250ZW50c1JlY3Q7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVu
dHNDbGlwcGluZ1JlY3QpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzQ2xpcHBpbmdS
ZWN0OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IG9wYWNpdHk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6QmFja2luZ1N0b3JlKQorICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNraW5nU3Rv
cmU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCB0cmFuc2Zvcm07CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAgICBlbmNvZGVyIDw8IGNo
aWxkcmVuVHJhbnNmb3JtOworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZp
bHRlcnMpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGZpbHRlcnM7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKQorICAgICAgICAgICAgZW5jb2Rl
ciA8PCBiYWNrZHJvcEZpbHRlcnMgPDwgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKKyAgICAgICAgaWYg
KGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPGNsYXNzIERlY29kZXI+CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBXQ0xheWVyVXBhdGVJbmZvJiByZXN1bHQpCisgICAgewor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZXMpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpDaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrTGF5
ZXIpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tMYXllcikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChy
ZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGxpY2FMYXllcikgeworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwbGljYUxheWVyKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6R2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hbmNob3JQb2ludCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzT3JpZ2luKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnByZXNlcnZlczNEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6Q29udGVudHNWaXNpYmxlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5jb250ZW50c1Zpc2libGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNr
ZmFjZVZpc2liaWxpdHkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmJhY2tmYWNlVmlzaWJpbGl0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1hc2tz
VG9Cb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tz
VG9Cb3VuZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zb2xpZENvbG9yKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzKSB7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG93RGVidWdCb3JkZXIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRl
YnVnQm9yZGVyQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlYnVnQm9yZGVyV2lkdGgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpIHsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3dSZXBhaW50Q291bnRlcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
cmVwYWludENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNSZWN0
KSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1JlY3Qp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDb250ZW50c0NsaXBwaW5nUmVjdCkgewor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNDbGlwcGluZ1Jl
Y3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KSB7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5iYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpU
cmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5z
Zm9ybSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtKSB7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlblRyYW5zZm9y
bSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlm
IChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMpIHsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmJhY2tkcm9wRmlsdGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2Ryb3BGaWx0
ZXJzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0cnVjdCBXQ1VwYXRlSW5mbyB7Cisg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIHJvb3RMYXllcjsKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBhZGRlZExh
eWVyczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
PiByZW1vdmVkTGF5ZXJzOworICAgIFZlY3RvcjxXQ0xheWVyVXBhdGVJbmZvPiBjaGFuZ2VkTGF5
ZXJzOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCByb290TGF5ZXI7
CisgICAgICAgIGVuY29kZXIgPDwgYWRkZWRMYXllcnM7CisgICAgICAgIGVuY29kZXIgPDwgcmVt
b3ZlZExheWVyczsKKyAgICAgICAgZW5jb2RlciA8PCBjaGFuZ2VkTGF5ZXJzOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgorICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV0NVcGF0ZUluZm8mIHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJvb3RMYXllcikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmFkZGVkTGF5ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQucmVtb3ZlZExheWVycykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNoYW5nZWRMYXllcnMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpXQ0xheWVyQ2hhbmdlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlLAor
ICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6Ok1hc2tMYXllciwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdl
OjpSZXBsaWNhTGF5ZXIsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6R2VvbWV0cnks
CisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UHJlc2VydmVzM0QsCisgICAgICAgIFdl
YktpdDo6V0NMYXllckNoYW5nZTo6Q29udGVudHNWaXNpYmxlLAorICAgICAgICBXZWJLaXQ6OldD
TGF5ZXJDaGFuZ2U6OkJhY2tmYWNlVmlzaWJpbGl0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVy
Q2hhbmdlOjpNYXNrc1RvQm91bmRzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlNv
bGlkQ29sb3IsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6RGVidWdWaXN1YWxzLAor
ICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCwKKyAgICAgICAgV2Vi
S2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXll
ckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6T3BhY2l0eSwKKyAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3Rv
cmUsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtLAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3JtLAorICAgICAgICBXZWJLaXQ6
OldDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6
QmFja2Ryb3BGaWx0ZXJzLAorICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlBsYXRmb3Jt
TGF5ZXIKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNX
aW5DYWlyby5jbWFrZQppbmRleCBlYjQwYjRjNjZkZDguLjQ5YTNmNDFlZjY2NCAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC00NCw2ICs0NCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9DQUlSTyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSIE9OKQorU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1dDIE9OKQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMg
T04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>
<flag name="review"
          id="467097"
          type_id="1"
          status="+"
          setter="don.olmstead"
    />
    <flag name="commit-queue"
          id="467110"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>