<?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>237328</bug_id>
          
          <creation_ts>2022-03-01 09:23:37 -0800</creation_ts>
          <short_desc>[GTK][WPE] Provide DMABuf-based composition layers, DMABufVideoSink integration</short_desc>
          <delta_ts>2022-03-16 06:13:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=237897</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237649</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>alex</cc>
    
    <cc>annulen</cc>
    
    <cc>clord</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>crzwdjk</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1847055</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-01 09:23:37 -0800</bug_when>
    <thetext>[GTK][WPE] Add TextureMapperPlatformLayerProxyDMABuf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847057</commentid>
    <comment_count>1</comment_count>
      <attachid>453504</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-01 09:25:31 -0800</bug_when>
    <thetext>Created attachment 453504
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847784</commentid>
    <comment_count>2</comment_count>
      <attachid>453709</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-03 01:23:13 -0800</bug_when>
    <thetext>Created attachment 453709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847803</commentid>
    <comment_count>3</comment_count>
      <attachid>453709</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-03-03 03:01:18 -0800</bug_when>
    <thetext>Comment on attachment 453709
Patch

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

Maybe I&apos;m being overly cautious, but there&apos;s just too much unused and untested code here and I have too many questions to grant a review. I think there are a few options that make sense to me:
- Split this into multiple patches and introduce API tests to verify expected behaviour.
- Reduce the size of this patch so there&apos;s less unused code added in one go and be a bit more liberal with comments/asserts.
- Submit a more complete patch where the code is exercised and it&apos;s more obvious the reasons for things because there&apos;s more surrounding context to judge it.

For the record, I like where this patch is going, I just don&apos;t think this is ready to land quite yet. The detailed changelog entry is great and appreciated.

&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:98
&gt; +    uint32_t planeWidth(unsigned planeIndex, uint32_t width) const
&gt; +    {
&gt; +        return (width &gt;&gt; planes[planeIndex].horizontalSubsampling);
&gt; +    }
&gt; +
&gt; +    uint32_t planeHeight(unsigned planeIndex, uint32_t height) const
&gt; +    {
&gt; +        return (height &gt;&gt; planes[planeIndex].verticalSubsampling);
&gt; +    }

I don&apos;t know why someone might ever do that, but maybe worth asserting that planeIndex &lt; numPlanes here.

&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:156
&gt; +inline DMABufFormat DMABufFormat::create&lt;DMABufFormat::FourCC::XRGB8888&gt;()

Given that none of these create functions are used in this patch, maybe it&apos;s worth introducing them with the patch that uses them? I&apos;m wary of adding this much unused, untested code, even if it&apos;s as simple as this.

&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:364
&gt; +        break;

Should we ASSERT_NOT_REACHED() here?

&gt; Source/WebCore/platform/graphics/gbm/DMABufReleaseFlag.h:65
&gt; +        this-&gt;~DMABufReleaseFlag();
&gt; +        new (this) DMABufReleaseFlag(WTFMove(o));

This is quite clever, but it seems fragile to future possible constructor/destructor changes. It&apos;s also not a form that exists anywhere else in WebCore. I can&apos;t think of an alternative that isn&apos;t more verbose, however, so maybe my dislike is irrational.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:68
&gt; +static PFNEGLCREATEIMAGEKHRPROC createImageKHR()
&gt; +{
&gt; +    static PFNEGLCREATEIMAGEKHRPROC s_createImageKHR;
&gt; +    static std::once_flag s_flag;
&gt; +    std::call_once(s_flag,
&gt; +        [&amp;] {
&gt; +            s_createImageKHR = reinterpret_cast&lt;PFNEGLCREATEIMAGEKHRPROC&gt;(eglGetProcAddress(&quot;eglCreateImageKHR&quot;));
&gt; +        });
&gt; +    return s_createImageKHR;
&gt; +}
&gt; +
&gt; +static PFNEGLDESTROYIMAGEKHRPROC destroyImageKHR()
&gt; +{
&gt; +    static PFNEGLDESTROYIMAGEKHRPROC s_destroyImageKHR;
&gt; +    static std::once_flag s_flag;
&gt; +    std::call_once(s_flag,
&gt; +        [&amp;] {
&gt; +            s_destroyImageKHR = reinterpret_cast&lt;PFNEGLDESTROYIMAGEKHRPROC&gt;(eglGetProcAddress(&quot;eglDestroyImageKHR&quot;));
&gt; +        });
&gt; +    return s_destroyImageKHR;
&gt; +}

Is there a reason to add these instead of using the ones in GLContextEGL?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:122
&gt; +    // Avoid any funky situation where the two layers are the same.

Can this legitimately happen? Should we assert something here?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:152
&gt; +    if (hasStaleLayers) {
&gt; +        LayerMap updatedLayers;
&gt; +        for (auto it = m_layers.begin(); it != m_layers.end(); ++it) {
&gt; +            if (!isStaleLayer(it-&gt;value.get()))
&gt; +                updatedLayers.add(it-&gt;key, it-&gt;value.copyRef());
&gt; +        }
&gt; +        m_layers = WTFMove(updatedLayers);
&gt; +    }

Is there any reason not to use HashMap::removeIf here instead of recreating LayerMap?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:159
&gt; +    // Avoid any funky situation where the two layers are the same.

Same question about legitimacy/asserting.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:175
&gt; +    m_object = DMABufObject(0);

It doesn&apos;t look like this function calls out to anything, is there any reason to explicitly destroy this here?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:190
&gt; +    m_imageData = nullptr;

If we&apos;re explicitly clearing this, may as well put it inside the above block - but I&apos;d suggest just omitting it unless there&apos;s a specific reason.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:220
&gt; +        // TODO: YUV support, possible when different colorspaces are supported.

I&apos;d add an ASSERT_NOT_REACHED to go with this TODO.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:250
&gt; +        attributes[attrIndex++] = EGL_WIDTH;
&gt; +        attributes[attrIndex++] = object.format.planeWidth(i, object.width);
&gt; +        attributes[attrIndex++] = EGL_HEIGHT;
&gt; +        attributes[attrIndex++] = object.format.planeHeight(i, object.height);
&gt; +        attributes[attrIndex++] = EGL_LINUX_DRM_FOURCC_EXT;
&gt; +        attributes[attrIndex++] = EGLint(object.format.planes[i].fourcc);
&gt; +        attributes[attrIndex++] = EGL_DMA_BUF_PLANE0_FD_EXT;
&gt; +        attributes[attrIndex++] = object.fd[i];
&gt; +        attributes[attrIndex++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
&gt; +        attributes[attrIndex++] = object.offset[i];
&gt; +        attributes[attrIndex++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
&gt; +        attributes[attrIndex++] = object.stride[i];
&gt; +        attributes[attrIndex++] = EGL_NONE;

Using the existing GLContextEGL::createImage would allow you to use the nicer attributes construction that alexg added - see platform/graphics/texmap/TextureMapperPlatformLayerDmabuf.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847852</commentid>
    <comment_count>4</comment_count>
      <attachid>453709</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-03 05:37:39 -0800</bug_when>
    <thetext>Comment on attachment 453709
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:98
&gt;&gt; +    }
&gt; 
&gt; I don&apos;t know why someone might ever do that, but maybe worth asserting that planeIndex &lt; numPlanes here.

OK.

&gt;&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:156
&gt;&gt; +inline DMABufFormat DMABufFormat::create&lt;DMABufFormat::FourCC::XRGB8888&gt;()
&gt; 
&gt; Given that none of these create functions are used in this patch, maybe it&apos;s worth introducing them with the patch that uses them? I&apos;m wary of adding this much unused, untested code, even if it&apos;s as simple as this.

I don&apos;t think it makes sense having to revisit plane definitions every time a new format is introduced. That&apos;s why they are all provided here, from the beginning.

&gt;&gt; Source/WebCore/platform/graphics/gbm/DMABufFormat.h:364
&gt;&gt; +        break;
&gt; 
&gt; Should we ASSERT_NOT_REACHED() here?

Can&apos;t guarantee every FourCC value (e.g. something from GStreamer) will be covered here. So an &apos;invalid&apos; DMABufFormat is returned.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:68
&gt;&gt; +}
&gt; 
&gt; Is there a reason to add these instead of using the ones in GLContextEGL?

Yes, there&apos;s no construction of GLContextEGL. And they would be eliminated once libepoxy is adopted by the GTK port.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:122
&gt;&gt; +    // Avoid any funky situation where the two layers are the same.
&gt; 
&gt; Can this legitimately happen? Should we assert something here?

I don&apos;t know, but it can be prevented if it ever does. Debug-time assert can be used to signal it.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:152
&gt;&gt; +    }
&gt; 
&gt; Is there any reason not to use HashMap::removeIf here instead of recreating LayerMap?

It should be possible to use it.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:175
&gt;&gt; +    m_object = DMABufObject(0);
&gt; 
&gt; It doesn&apos;t look like this function calls out to anything, is there any reason to explicitly destroy this here?

I&apos;ll remove this.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:190
&gt;&gt; +    m_imageData = nullptr;
&gt; 
&gt; If we&apos;re explicitly clearing this, may as well put it inside the above block - but I&apos;d suggest just omitting it unless there&apos;s a specific reason.

I&apos;ll remove this too, and try and push the texture/image destruction into the EGLImageData dtor.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:220
&gt;&gt; +        // TODO: YUV support, possible when different colorspaces are supported.
&gt; 
&gt; I&apos;d add an ASSERT_NOT_REACHED to go with this TODO.

OK.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:250
&gt;&gt; +        attributes[attrIndex++] = EGL_NONE;
&gt; 
&gt; Using the existing GLContextEGL::createImage would allow you to use the nicer attributes construction that alexg added - see platform/graphics/texmap/TextureMapperPlatformLayerDmabuf.cpp

Not going to construct it. But I&apos;ll switch to using Vector&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847861</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-03 06:44:16 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #3)
&gt; Comment on attachment 453709 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453709&amp;action=review
&gt; 
&gt; Maybe I&apos;m being overly cautious, but there&apos;s just too much unused and
&gt; untested code here and I have too many questions to grant a review. I think
&gt; there are a few options that make sense to me:
&gt; - Split this into multiple patches and introduce API tests to verify
&gt; expected behaviour.
&gt; - Reduce the size of this patch so there&apos;s less unused code added in one go
&gt; and be a bit more liberal with comments/asserts.
&gt; - Submit a more complete patch where the code is exercised and it&apos;s more
&gt; obvious the reasons for things because there&apos;s more surrounding context to
&gt; judge it.
&gt; 
&gt; For the record, I like where this patch is going, I just don&apos;t think this is
&gt; ready to land quite yet. The detailed changelog entry is great and
&gt; appreciated.
&gt; 

I&apos;ll upload the updated patch. Review it if you have time, but I&apos;d prefer to roll it into a bigger patch at this point, not smaller ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847863</commentid>
    <comment_count>6</comment_count>
      <attachid>453729</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-03 06:46:59 -0800</bug_when>
    <thetext>Created attachment 453729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847864</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-03-03 06:50:10 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #5)
&gt; I&apos;ll upload the updated patch. Review it if you have time, but I&apos;d prefer to
&gt; roll it into a bigger patch at this point, not smaller ones.

That sounds good, I&apos;ll wait for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848281</commentid>
    <comment_count>8</comment_count>
      <attachid>453839</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-04 07:09:09 -0800</bug_when>
    <thetext>Created attachment 453839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850008</commentid>
    <comment_count>9</comment_count>
      <attachid>454329</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-10 03:02:35 -0800</bug_when>
    <thetext>Created attachment 454329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850992</commentid>
    <comment_count>10</comment_count>
      <attachid>454329</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-03-14 13:34:04 -0700</bug_when>
    <thetext>Comment on attachment 454329
Patch

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

Awesome patch! Thanks, let&apos;s do it! Just added a couple of small comments.

&gt; Source/WebCore/platform/graphics/gbm/DMABufReleaseFlag.h:38
&gt; +    enum InitializeTag { Initialize };
&gt; +    DMABufReleaseFlag(InitializeTag)

InitializeTag is not used, is it a left-over?

&gt; Source/WebCore/platform/graphics/gbm/GBMBufferSwapchain.cpp:47
&gt; +    // If the description of the requested byffers has changed, update the description to the new one and wreck the existing buffers.

Typo byffers.

&gt; Source/WebCore/platform/graphics/gbm/GBMBufferSwapchain.cpp:142
&gt; +    m_state.releaseFlag = DMABufReleaseFlag(DMABufReleaseFlag::Initialize);

Ditto bout the InitializeTag.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxyDMABuf.cpp:123
&gt; +void TextureMapperPlatformLayerProxyDMABuf::invalidate()
&gt; +{
&gt; +    Locker locker { m_lock };
&gt; +
&gt; +    m_pendingLayer = nullptr;
&gt; +    m_committedLayer = nullptr;
&gt; +    m_layers = { };
&gt; +
&gt; +    m_compositor = nullptr;
&gt; +    m_targetLayer = nullptr;
&gt; +}

If we don&apos;t set m_compositorThread to nullptr we can be asserting if the layer tree is reused when the threaded compositor is destroyed, it can happen when using the history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851180</commentid>
    <comment_count>11</comment_count>
      <attachid>454329</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-15 00:11:21 -0700</bug_when>
    <thetext>Comment on attachment 454329
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gbm/DMABufReleaseFlag.h:38
&gt;&gt; +    DMABufReleaseFlag(InitializeTag)
&gt; 
&gt; InitializeTag is not used, is it a left-over?

It&apos;s not unused, it&apos;s the enumeration type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851186</commentid>
    <comment_count>12</comment_count>
      <attachid>454674</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-15 00:33:46 -0700</bug_when>
    <thetext>Created attachment 454674
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851187</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-15 00:34:45 -0700</bug_when>
    <thetext>zan@falconsigh.net does not have committer permissions according to https://raw.githubusercontent.com/WebKit/WebKit/main/metadata/contributors.json.

Rejecting attachment 454674 from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851205</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-15 01:56:38 -0700</bug_when>
    <thetext>Committed r291270 (248419@main): &lt;https://commits.webkit.org/248419@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454674.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851206</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-15 01:57:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/90295492&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851684</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-16 01:25:48 -0700</bug_when>
    <thetext>Rolled out in #237908.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851722</commentid>
    <comment_count>17</comment_count>
      <attachid>454821</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-03-16 04:06:50 -0700</bug_when>
    <thetext>Created attachment 454821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851730</commentid>
    <comment_count>18</comment_count>
      <attachid>454821</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-03-16 05:13:29 -0700</bug_when>
    <thetext>Comment on attachment 454821
Patch

LGTM. Let&apos;s try it again. We need to link here the next patch with the gbm guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851764</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-16 06:13:41 -0700</bug_when>
    <thetext>Committed r291343 (248482@main): &lt;https://commits.webkit.org/248482@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454821.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453504</attachid>
            <date>2022-03-01 09:25:31 -0800</date>
            <delta_ts>2022-03-03 01:23:07 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-237328-20220301182529.patch</filename>
            <type>text/plain</type>
            <size>39886</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M4NzQ0M2U5NmJiOWU2
ZGI1NzA5NWU4MDYyMTY4NTdkZDQ0NTEyNy4uYWU1YjU2NjUxYTM4YmU1MTIzNGU5ZWI4MGZjOGMw
YzBmNjgyZWYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDIyLTAzLTAxICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFk
ZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzczMjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwgYSBUZXh0dXJlTWFwcGVyIHByb3h5CisgICAgICAgIGlt
cGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwbGF0Zm9ybSBsYXllcnMgYmFja2VkIGJ5IGRtYWJ1
ZiBvYmplY3RzLgorICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZGlzcGxheSBv
ZiBkbWFidWYgcHJvZHVjZXJzIGxpa2UgR1N0cmVhbWVyCisgICAgICAgIHBpcGVsaW5lcyBvciBB
TkdMRS1iYWNrZWQgV2ViR0wgY29udGV4dHMuIFRoZSBETUFCdWZMYXllciBjbGFzcyBpcyB0aGUK
KyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgb2JqZWN0LCBoYW5kbGluZyBkaXNwbGF5IG9mIHRoZSBh
Y3R1YWwgZG1hYnVmLiBUaGUgcHJveHkKKyAgICAgICAgaXRzZWxmIGlzIHRhc2tlZCB3aXRoIGNy
ZWF0aW5nIGFuZCBjYWNoaW5nIHN1Y2ggbGF5ZXJzIGZvciBhbnkgZG1hYnVmCisgICAgICAgIG9i
amVjdCB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgcHJvZHVjZXIuCisKKyAgICAgICAgRm9yIGVh
Y2ggZG1hYnVmIG9iamVjdCBwdXNoZWQgaW50byB0aGUgcHJveHksIHRoZSBhY2NvcmRpbmcgRE1B
QnVmTGF5ZXIKKyAgICAgICAgb2JqZWN0IGlzIHNwYXduZWQgYW5kIGNhY2hlZCBmb3IgZnV0dXJl
IHJldXNlLCBleHBlY3RpbmcgdGhlIHByb2R1Y2VyCisgICAgICAgIHRvIGJlIGFibGUgdG8gcHJv
dmlkZSBkbWFidWZzIGZyb20gYSBwb29sIG9yIHN3YXBjaGFpbiBvZiB0aGVzZSBvYmplY3RzLgor
ICAgICAgICBUaGUgY2FjaGUgaXMgZW1wdGllZCB3aGVuZXZlciBkbWFidWZzIGdvIHVudXNlZCBm
b3IgYSBjZXJ0YWluIGFtb3VudCBvZgorICAgICAgICBzd2Fwcywgb3IgaWYgdGhlIHNpemUgb2Yg
dGhlIHByb3ZpZGVkIGRtYWJ1ZnMgY2hhbmdlcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIGNl
cnRhaW4gZG1hYnVmLW9yaWVudGVkIGZhY2lsaXRpZXMgYXJlIGFkZGVkLgorCisgICAgICAgIERN
QUJ1ZkZvcm1hdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgZGlmZmVyZW50IERSTSBmb3JtYXRz
LCBmb3IKKyAgICAgICAgaW5zdGFuY2UgaG93IGRpZmZlcmVudCBwbGFuZXMgZm9yIHNwZWNpZmlj
IGZvcm1hdHMgYXJlIGZvcm1hdHRlZCBhbmQKKyAgICAgICAgc2l6ZWQuCisKKyAgICAgICAgRE1B
QnVmT2JqZWN0IGlzIGEgY2xhc3MgdGhhdCBoYW5kbGVzIGEgZ2l2ZW4gZ3JvdXBpbmcgb2YgZG1h
YnVmcworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQuIEl0IGhhcyBh
biBhc3NvY2lhdGVkIGhhbmRsZSB2YWx1ZSwKKyAgICAgICAgc2l6ZSwgYW5kIHBlci1wbGFuZSBk
bWFidWYgZmlsZSBkZXNjcmlwdG9ycywgb2Zmc2V0cywgc3RyaWRlcyBhbmQKKyAgICAgICAgbW9k
aWZpZXJzLCBhbG9uZyB3aXRoIGEgRE1BQnVmUmVsZWFzZUZsYWcgaW5zdGFuY2UuCisKKyAgICAg
ICAgRE1BQnVmUmVsZWFzZUZsYWcgb2JqZWN0cyBhcmUgdXNlZCBhcyBhbiBldmVudGZkLWJhc2Vk
IHJlbGVhc2UgbWVjaGFuaXNtCisgICAgICAgIHRoYXQgaW5kaWNhdGVzIHRvIHRoZSBwcm9kdWNl
ciB0aGF0IHRoZSBnaXZlbiBETUFCdWZPYmplY3QgaGFzIGJlZW4KKyAgICAgICAgcHJlc2VudGVk
IGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzZWQgYW5kIGlzIHRodXMgYXZhaWxhYmxlIGZvciByZXVz
ZS4KKworICAgICAgICBUaGlzIGlzIGEgcHJvdmlzaW9uYWwgaW50cm9kdWN0aW9uIG9mIHRoZXNl
IGZhY2lsaXRpZXMgaW50byB0aGUgdHJlZSwKKyAgICAgICAgd2l0aCBjZXJ0YWluIGJlaGF2aW9y
IChlLmcuIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBZVVYgZm9ybWF0cyBpbiB0aGUKKyAgICAgICAg
RE1BQnVmTGF5ZXIgY2xhc3MpIHN0aWxsIHBlbmRpbmcuIEludGVncmF0aW9uIHdpdGggcHJvZHVj
ZXJzIChsaWtlIHRoZQorICAgICAgICBETUFCdWZWaWRlb1NpbmsgaW4gdGhlIEdTdHJlYW1lciBw
aXBlbGluZSkgZm9sbG93cy4KKworICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQyk6Cisg
ICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6OnBsYW5lV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0OjpwbGFuZUhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpETUFCdWZGb3JtYXQ6OlBsYW5lOjpQbGFuZSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkEpOgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmRm9ybWF0SW1wbDo6ZGVmaW5lUGxhbmUpOgorICAgICAgICAoV2ViQ29yZTo6RE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6RE1BQnVmT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6fkRNQUJ1Zk9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZPYmplY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFnLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmUmVsZWFzZUZsYWc6OkRNQUJ1ZlJlbGVhc2VGbGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjp+RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZSZWxlYXNlRmxhZzo6ZHVwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJl
bGVhc2VGbGFnOjpyZWxlYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxl
YXNlRmxhZzo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmFjdGl2YXRl
T25Db21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5RE1BQnVmOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OnN3YXBCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6cHVzaERN
QUJ1Zik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjpETUFCdWZMYXllcjo6RE1BQnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6On5ETUFCdWZM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjpETUFCdWZMYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6
OmNyZWF0ZUVHTEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaDogQWRkZWQuCisKIDIwMjIt
MDMtMDEgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBsaWNpdGx5
IGRpc2FibGUgc3R5bGUgc2hhcmluZyBmb3IgZm9ybSBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNGUwYWViZTE5NzQ3Nzg4ZDY0MGRj
OTk1YTY2YzQzYmJhMmM5MTgxNi4uNzNmNjljNTA5NDcwZWY4YWU5NzljY2Q5N2Q2MWEwZjc4OGE1
NDdmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBA
IC0zNCw2ICszNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNvbGlkQ29sb3JMYXllci5oCkBAIC02MCw2
ICs2MSw3IEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
RG1hYnVmLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wuY3Bw
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMWRmOTk1NjA5MGVkNDY1N2I0
NWM3ODk0ZGFhZGU4Y2Y3ZjMxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0LmgKQEAgLTAsMCArMSwzNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHly
aWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgRE1BQnVmRm9ybWF0SW1wbCB7CisKK3N0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgY3JlYXRlRm91ckNDKGNoYXIgYSwgY2hhciBiLCBjaGFyIGMsIGNoYXIgZCkKK3sKKyAg
ICByZXR1cm4gdWludDMyX3QoYSkgfCAodWludDMyX3QoYikgPDwgOCkgfCAodWludDMyX3QoYykg
PDwgMTYpIHwgKHVpbnQzMl90KGQpIDw8IDI0KTsKK30KKworfQorCitzdHJ1Y3QgRE1BQnVmRm9y
bWF0IHsKKyAgICBlbnVtIGNsYXNzIEZvdXJDQyA6IHVpbnQzMl90IHsKKyAgICAgICAgSW52YWxp
ZCA9IDAsCisKKyAgICAgICAgUjggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1In
LCAnOCcsICcgJywgJyAnKSwKKyAgICAgICAgR1I4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0
ZUZvdXJDQygnRycsICdSJywgJzgnLCAnOCcpLAorCisgICAgICAgIFhSR0I4ODg4ID0gRE1BQnVm
Rm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdYJywgJ1InLCAnMicsICc0JyksCisgICAgICAgIFhC
R1I4ODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdYJywgJ0InLCAnMicsICc0
JyksCisgICAgICAgIFJHQlg4ODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdS
JywgJ1gnLCAnMicsICc0JyksCisgICAgICAgIEJHUlg4ODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6
Y3JlYXRlRm91ckNDKCdCJywgJ1gnLCAnMicsICc0JyksCisgICAgICAgIEFSR0I4ODg4ID0gRE1B
QnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ1InLCAnMicsICc0JyksCisgICAgICAg
IEFCR1I4ODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ0InLCAnMics
ICc0JyksCisgICAgICAgIFJHQkE4ODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckND
KCdSJywgJ0EnLCAnMicsICc0JyksCisgICAgICAgIEJHUkE4ODg4ID0gRE1BQnVmRm9ybWF0SW1w
bDo6Y3JlYXRlRm91ckNDKCdCJywgJ0EnLCAnMicsICc0JyksCisgICAgICAgIFJHQjg4OCA9IERN
QUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICdHJywgJzInLCAnNCcpLAorICAgICAg
ICBCR1I4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAnRycsICcyJywg
JzQnKSwKKworICAgICAgICBJNDIwID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdJ
JywgJzQnLCAnMicsICcwJyksCisgICAgICAgIFlWMTIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnVicsICcxJywgJzInKSwKKyAgICAgICAgQTQyMCA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnQScsICc0JywgJzInLCAnMCcpLAorICAgICAgICBOVjEyID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdOJywgJ1YnLCAnMScsICcyJyksCisgICAg
ICAgIE5WMjEgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ04nLCAnVicsICcyJywg
JzEnKSwKKworICAgICAgICBZVVkyID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJ1UnLCAnWScsICcyJyksCisgICAgICAgIFlWWVUgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnVicsICdZJywgJ1UnKSwKKyAgICAgICAgVVlWWSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnVScsICdZJywgJ1YnLCAnWScpLAorICAgICAgICBWWVVZID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdWJywgJ1knLCAnVScsICdZJyksCisgICAg
ICAgIFZVWUEgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1YnLCAnVScsICdZJywg
J0EnKSwKKyAgICAgICAgQVlVViA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQScs
ICdZJywgJ1UnLCAnVicpLAorCisgICAgICAgIFk0NDQgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnNCcsICc0JywgJzQnKSwKKyAgICAgICAgWTQxQiA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzEnLCAnQicpLAorICAgICAgICBZNDJCID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZJywgJzQnLCAnMicsICdCJyksCisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY19tYXhQbGFuZXMgPSA0OworCisg
ICAgdGVtcGxhdGU8Rm91ckNDPiBzdGF0aWMgRE1BQnVmRm9ybWF0IGNyZWF0ZSgpID0gZGVsZXRl
OworICAgIHN0YXRpYyBETUFCdWZGb3JtYXQgY3JlYXRlKHVpbnQzMl90KTsKKworICAgIHRlbXBs
YXRlPEZvdXJDQyBmb3VyY2NWYWx1ZSwgdHlwZW5hbWUuLi4gUGxhbmVEZWZpbml0aW9uVHlwZXM+
CisgICAgc3RhdGljIERNQUJ1ZkZvcm1hdCBpbnN0YW50aWF0ZSgpOworCisgICAgRm91ckNDIGZv
dXJjYyB7IEZvdXJDQzo6SW52YWxpZCB9OworICAgIHVuc2lnbmVkIG51bVBsYW5lcyB7IDAgfTsK
KworICAgIHVpbnQzMl90IHBsYW5lV2lkdGgodW5zaWduZWQgcGxhbmVJbmRleCwgdWludDMyX3Qg
d2lkdGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHdpZHRoID4+IHBsYW5lc1twbGFu
ZUluZGV4XS5ob3Jpem9udGFsU3Vic2FtcGxpbmcpOworICAgIH0KKworICAgIHVpbnQzMl90IHBs
YW5lSGVpZ2h0KHVuc2lnbmVkIHBsYW5lSW5kZXgsIHVpbnQzMl90IGhlaWdodCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAoaGVpZ2h0ID4+IHBsYW5lc1twbGFuZUluZGV4XS52ZXJ0aWNh
bFN1YnNhbXBsaW5nKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0MgZm91cmNjVmFsdWUs
IHVuc2lnbmVkIGhzVmFsdWUsIHVuc2lnbmVkIHZzVmFsdWU+CisgICAgc3RydWN0IFBsYW5lRGVm
aW5pdGlvbiB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgRm91ckNDIGZvdXJjYyA9IGZvdXJj
Y1ZhbHVlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGhvcml6b250YWxTdWJz
YW1wbGluZyA9IGhzVmFsdWU7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdmVy
dGljYWxTdWJzYW1wbGluZyA9IHZzVmFsdWU7CisgICAgfTsKKworICAgIHN0cnVjdCBQbGFuZSB7
CisgICAgICAgIFBsYW5lKCkgPSBkZWZhdWx0OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFBsYW5lRGVmaXRpb25UeXBlPgorICAgICAgICBQbGFuZShjb25zdCBQbGFuZURlZml0aW9uVHlw
ZSYpCisgICAgICAgICAgICA6IGZvdXJjYyhQbGFuZURlZml0aW9uVHlwZTo6Zm91cmNjKQorICAg
ICAgICAgICAgLCBob3Jpem9udGFsU3Vic2FtcGxpbmcoUGxhbmVEZWZpdGlvblR5cGU6Omhvcml6
b250YWxTdWJzYW1wbGluZykKKyAgICAgICAgICAgICwgdmVydGljYWxTdWJzYW1wbGluZyhQbGFu
ZURlZml0aW9uVHlwZTo6dmVydGljYWxTdWJzYW1wbGluZykKKyAgICAgICAgeyB9CisKKyAgICAg
ICAgRm91ckNDIGZvdXJjYyB7IEZvdXJDQzo6SW52YWxpZCB9OworICAgICAgICB1bnNpZ25lZCBo
b3Jpem9udGFsU3Vic2FtcGxpbmcgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHZlcnRpY2FsU3Vi
c2FtcGxpbmcgeyAwIH07CisgICAgfTsKKyAgICBzdGQ6OmFycmF5PFBsYW5lLCBjX21heFBsYW5l
cz4gcGxhbmVzOworfTsKKworbmFtZXNwYWNlIERNQUJ1ZkZvcm1hdEltcGwgeworCit0ZW1wbGF0
ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3VyY2NWYWx1ZT4KK2lubGluZSBETUFCdWZGb3JtYXQg
Y3JlYXRlU2luZ2xlUGxhbmVSR0JBKCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0
YW50aWF0ZTxmb3VyY2NWYWx1ZSwKKyAgICAgICAgRE1BQnVmRm9ybWF0OjpQbGFuZURlZmluaXRp
b248Zm91cmNjVmFsdWUsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgSW5kZXgsIHNp
emVfdCBTaXplLCB0eXBlbmFtZSBQbGFuZURlZmluaXRpb25UeXBlLCB0eXBlbmFtZS4uLiBQbGFu
ZURlZmluaXRpb25UeXBlcz4KK3ZvaWQgZGVmaW5lUGxhbmUoc3RkOjphcnJheTxETUFCdWZGb3Jt
YXQ6OlBsYW5lLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiYgcGxhbmVzKQoreworICAgIG5l
dyAoJnBsYW5lc1tJbmRleF0pIERNQUJ1ZkZvcm1hdDo6UGxhbmUoUGxhbmVEZWZpbml0aW9uVHlw
ZSB7IH0pOworICAgIGlmIGNvbnN0ZXhwciAoKEluZGV4ICsgMSkgPCBTaXplKQorICAgICAgICBk
ZWZpbmVQbGFuZTxJbmRleCArIDEsIFNpemUsIFBsYW5lRGVmaW5pdGlvblR5cGVzLi4uPihwbGFu
ZXMpOworfQorCit9CisKK3RlbXBsYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDIGZvdXJjY1ZhbHVl
LCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KK2lubGluZSBETUFCdWZGb3JtYXQg
RE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZSgpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yu
Li4oUGxhbmVEZWZpbml0aW9uVHlwZXMpIDw9IDQpOworCisgICAgRE1BQnVmRm9ybWF0IGZvcm1h
dDsKKyAgICBmb3JtYXQuZm91cmNjID0gZm91cmNjVmFsdWU7CisgICAgZm9ybWF0Lm51bVBsYW5l
cyA9IHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBlcyk7CisgICAgRE1BQnVmRm9ybWF0SW1w
bDo6ZGVmaW5lUGxhbmU8MCwgc2l6ZW9mLi4uKFBsYW5lRGVmaW5pdGlvblR5cGVzKSwgUGxhbmVE
ZWZpbml0aW9uVHlwZXMuLi4+KGZvcm1hdC5wbGFuZXMpOworICAgIHJldHVybiBmb3JtYXQ7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlhSR0I4ODg4PigpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdSODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpYQkdSODg4OD4oKTsKK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6UkdCWDg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0
SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6UkdCWDg4ODg+KCk7Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVm
Rm9ybWF0OjpGb3VyQ0M6OkJHUlg4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdElt
cGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OkJHUlg4ODg4PigpOworfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpBUkdCODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBs
OjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpBUkdCODg4OD4oKTsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3Jt
YXQ6OkZvdXJDQzo6QUJHUjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6
Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QUJHUjg4ODg+KCk7Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0
OjpGb3VyQ0M6OlJHQkE4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNy
ZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlJHQkE4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpCR1JBODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpCR1JBODg4OD4oKTsKK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6STQyMD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZv
dXJDQzo6STQyMCwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5l
RGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVYxMj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
WVYxMiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5p
dGlvbjxGb3VyQ0M6OlI4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1
ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QTQyMD4o
KQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6QTQyMCwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFu
ZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxG
b3VyQ0M6OlI4LCAxLCAxPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAs
IDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1h
dDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjEyPigpCit7CisgICAgcmV0dXJuIERN
QUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpOVjEyLAorICAgICAgICBQbGFuZURlZmlu
aXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6
OkdSODgsIDEsIDE+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERN
QUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxPigpCit7CisgICAg
cmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpOVjIxLAorICAgICAgICBQ
bGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlv
bjxGb3VyQ0M6OkdSODgsIDEsIDE+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVVkyPigp
Cit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZVVkyLAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6WVZZVT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3Rh
bnRpYXRlPEZvdXJDQzo6WVZZVSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4
OCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVm
Rm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlVZVlk+KCkKK3sKKyAgICByZXR1
cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlVZVlksCisgICAgICAgIFBsYW5l
RGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpWWVVZPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckND
OjpZVllVLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0
ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6VlVZQT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3Jt
YXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6VlVZQSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZv
dXJDQzo6QUJHUjg4ODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBWVVWPigp
Cit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpWVVlBLAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpBQkdSODg4OCwgMCwgMD4+KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1B
QnVmRm9ybWF0OjpGb3VyQ0M6Olk0NDQ+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0Ojpp
bnN0YW50aWF0ZTxGb3VyQ0M6Olk0NDQsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6
OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4+KCk7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9y
bWF0OjpGb3VyQ0M6Olk0MUI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50
aWF0ZTxGb3VyQ0M6Olk0MUIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAw
LCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDIsIDA+LAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMiwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpG
b3VyQ0M6Olk0MkI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxG
b3VyQ0M6Olk0MkIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDA+LAorICAgICAgICBQbGFu
ZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMD4+KCk7Cit9CisKK2lubGluZSBETUFCdWZGb3Jt
YXQgRE1BQnVmRm9ybWF0OjpjcmVhdGUodWludDMyX3QgZm91cmNjVmFsdWUpCit7CisgICAgc3dp
dGNoIChmb3VyY2NWYWx1ZSkgeworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpYUkdCODg4OCk6
CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpYUkdCODg4OD4oKTsKKyAgICBjYXNlIHVp
bnQzMl90KEZvdXJDQzo6WEJHUjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
WEJHUjg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlJHQlg4ODg4KToKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlJHQlg4ODg4PigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpCR1JYODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpCR1JYODg4
OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QVJHQjg4ODgpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6QVJHQjg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6
OkFCR1I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFCR1I4ODg4PigpOwor
ICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpSR0JBODg4OCk6CisgICAgICAgIHJldHVybiBjcmVh
dGU8Rm91ckNDOjpSR0JBODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QkdSQTg4
ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6QkdSQTg4ODg+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6Okk0MjApOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
STQyMD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WVYxMik6CisgICAgICAgIHJldHVy
biBjcmVhdGU8Rm91ckNDOjpZVjEyPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpBNDIw
KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkE0MjA+KCk7CisgICAgY2FzZSB1aW50
MzJfdChGb3VyQ0M6Ok5WMTIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6TlYxMj4o
KTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6TlYyMSk6CisgICAgICAgIHJldHVybiBjcmVh
dGU8Rm91ckNDOjpOVjIxPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpZVVkyKToKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllVWTI+KCk7CisgICAgY2FzZSB1aW50MzJfdChG
b3VyQ0M6OllWWVUpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WVZZVT4oKTsKKyAg
ICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VVlWWSk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91
ckNDOjpVWVZZPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpWWVVZKToKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlVZVlk+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6
OlZVWUEpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6VlVZQT4oKTsKKyAgICBjYXNl
IHVpbnQzMl90KEZvdXJDQzo6QVlVVik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpB
WVVWPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpZNDQ0KToKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZTxGb3VyQ0M6Olk0NDQ+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Olk0MUIp
OgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WTQxQj4oKTsKKyAgICBjYXNlIHVpbnQz
Ml90KEZvdXJDQzo6WTQyQik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZNDJCPigp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB7IH07
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODY0NDQ0NDM5
NGY3YjlkOWZmNDNkY2JkYzM5MmFiYWE3N2NjNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9iamVjdC5oCkBAIC0wLDAgKzEs
OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1ZlJlbGVhc2VG
bGFnLmgiCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxj
c3RkaW50PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBETUFCdWZPYmplY3QgeworICAgIERNQUJ1Zk9iamVjdCh1aW50cHRyX3QgaGFuZGxlKQor
ICAgICAgICA6IGhhbmRsZShoYW5kbGUpCisgICAgeyB9CisKKyAgICB+RE1BQnVmT2JqZWN0KCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtYXQubnVtUGxhbmVz
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmZFtpXSAhPSAtMSkKKyAgICAgICAgICAgICAgICBj
bG9zZShmZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBETUFCdWZPYmplY3QoY29uc3Qg
RE1BQnVmT2JqZWN0JikgPSBkZWxldGU7CisgICAgRE1BQnVmT2JqZWN0JiBvcGVyYXRvcj0oY29u
c3QgRE1BQnVmT2JqZWN0JikgPSBkZWxldGU7CisKKyAgICBETUFCdWZPYmplY3QoRE1BQnVmT2Jq
ZWN0JiYgbykKKyAgICAgICAgOiBoYW5kbGUoby5oYW5kbGUpCisgICAgICAgICwgZm9ybWF0KG8u
Zm9ybWF0KQorICAgICAgICAsIHdpZHRoKG8ud2lkdGgpCisgICAgICAgICwgaGVpZ2h0KG8uaGVp
Z2h0KQorICAgICAgICAsIHJlbGVhc2VGbGFnKFdURk1vdmUoby5yZWxlYXNlRmxhZykpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0Lm51bVBsYW5lczsgKytp
KSB7CisgICAgICAgICAgICBmZFtpXSA9IG8uZmRbaV07CisgICAgICAgICAgICBvLmZkW2ldID0g
LTE7CisKKyAgICAgICAgICAgIG9mZnNldFtpXSA9IG8ub2Zmc2V0W2ldOworICAgICAgICAgICAg
c3RyaWRlW2ldID0gby5zdHJpZGVbaV07CisgICAgICAgICAgICBtb2RpZmllcltpXSA9IG8ubW9k
aWZpZXJbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBETUFCdWZPYmplY3QmIG9wZXJhdG9y
PShETUFCdWZPYmplY3QmJiBvKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm8pCisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgdGhpcy0+fkRNQUJ1Zk9iamVjdCgpOwor
ICAgICAgICBuZXcgKHRoaXMpIERNQUJ1Zk9iamVjdChXVEZNb3ZlKG8pKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIHVpbnRwdHJfdCBoYW5kbGUgeyAwIH07CisgICAgRE1B
QnVmRm9ybWF0IGZvcm1hdCB7IH07CisgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgdWlu
dDMyX3QgaGVpZ2h0IHsgMCB9OworICAgIERNQUJ1ZlJlbGVhc2VGbGFnIHJlbGVhc2VGbGFnIHsg
fTsKKyAgICBzdGQ6OmFycmF5PGludCwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gZmQgeyAt
MSwgLTEsIC0xLCAtMSB9OworICAgIHN0ZDo6YXJyYXk8c2l6ZV90LCBETUFCdWZGb3JtYXQ6OmNf
bWF4UGxhbmVzPiBvZmZzZXQgeyAwLCAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTx1aW50MzJf
dCwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gc3RyaWRlIHsgMCwgMCwgMCwgMCB9OworICAg
IHN0ZDo6YXJyYXk8dWludDY0X3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IG1vZGlmaWVy
IHsgMCwgMCwgMCwgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFn
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmUmVsZWFzZUZs
YWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZjRkNzc2MDA1M2Y5OWM1NTg3NjUwYTA4NmFhYjk3MTA0ODc1Zjdl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0RNQUJ1ZlJlbGVhc2VGbGFnLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHN5cy9ldmVu
dGZkLmg+CisjaW5jbHVkZSA8d3RmL1VuaVN0ZEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0cnVjdCBETUFCdWZSZWxlYXNlRmxhZyB7CisgICAgRE1BQnVmUmVsZWFzZUZsYWco
KSA9IGRlZmF1bHQ7CisKKyAgICBlbnVtIEluaXRpYWxpemVUYWcgeyBJbml0aWFsaXplIH07Cisg
ICAgRE1BQnVmUmVsZWFzZUZsYWcoSW5pdGlhbGl6ZVRhZykKKyAgICB7CisgICAgICAgIGZkID0g
ZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyB8IEVGRF9OT05CTE9DSyk7CisgICAgfQorCisgICAgfkRN
QUJ1ZlJlbGVhc2VGbGFnKCkKKyAgICB7CisgICAgICAgIGlmIChmZCAhPSAtMSkKKyAgICAgICAg
ICAgIGNsb3NlKGZkKTsKKyAgICAgICAgZmQgPSAtMTsKKyAgICB9CisKKyAgICBETUFCdWZSZWxl
YXNlRmxhZyhjb25zdCBETUFCdWZSZWxlYXNlRmxhZyYpID0gZGVsZXRlOworICAgIERNQUJ1ZlJl
bGVhc2VGbGFnJiBvcGVyYXRvcj0oY29uc3QgRE1BQnVmUmVsZWFzZUZsYWcmKSA9IGRlbGV0ZTsK
KworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKERNQUJ1ZlJlbGVhc2VGbGFnJiYgbykKKyAgICB7Cisg
ICAgICAgIGZkID0gby5mZDsKKyAgICAgICAgby5mZCA9IC0xOworICAgIH0KKworICAgIERNQUJ1
ZlJlbGVhc2VGbGFnJiBvcGVyYXRvcj0oRE1BQnVmUmVsZWFzZUZsYWcmJiBvKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT0gJm8pCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAg
ICAgdGhpcy0+fkRNQUJ1ZlJlbGVhc2VGbGFnKCk7CisgICAgICAgIG5ldyAodGhpcykgRE1BQnVm
UmVsZWFzZUZsYWcoV1RGTW92ZShvKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBETUFCdWZSZWxlYXNlRmxhZyBkdXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGZk
ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBETUFCdWZSZWxlYXNl
RmxhZyBmbGFnOworICAgICAgICBmbGFnLmZkID0gZHVwQ2xvc2VPbkV4ZWMoZmQpOworICAgICAg
ICByZXR1cm4gZmxhZzsKKyAgICB9CisKKyAgICBib29sIHJlbGVhc2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIHVpbnQ2NF90IHZhbHVlIHsgMCB9OworICAgICAgICBpZiAocmVhZChmZCwgJnZhbHVlLCBz
aXplb2YodWludDY0X3QpKSA9PSBzaXplb2YodWludDY0X3QpKQorICAgICAgICAgICAgcmV0dXJu
ICEhdmFsdWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVh
c2UoKQorICAgIHsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHVpbnQ2NF90IHZhbHVlIHsgMSB9OworICAgICAgICB3cml0ZShmZCwgJnZhbHVl
LCBzaXplb2YodWludDY0X3QpKTsKKyAgICB9CisKKyAgICBpbnQgZmQgeyAtMSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NGRjY2M1NjMyNTY0
MTFjMTk1ZTVmMWQ3NTdkMWI4ZWMyZDlhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zi5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3Bs
YXkuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICB1aW50MzJfdCB3aWR0aCB7IDAgfTsKKyAgICB1aW50
MzJfdCBoZWlnaHQgeyAwIH07CisgICAgdW5zaWduZWQgbnVtSW1hZ2VzIHsgMCB9OworICAgIHN0
ZDo6YXJyYXk8R0x1aW50LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiB0ZXh0dXJlIHsgMCwg
MCwgMCwgMCB9OworICAgIHN0ZDo6YXJyYXk8RUdMSW1hZ2VLSFIsIERNQUJ1ZkZvcm1hdDo6Y19t
YXhQbGFuZXM+IGltYWdlIHsgRUdMX05PX0lNQUdFX0tIUiwgRUdMX05PX0lNQUdFX0tIUiwgRUdM
X05PX0lNQUdFX0tIUiwgRUdMX05PX0lNQUdFX0tIUiB9OworfTsKKworVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1ZigpID0gZGVmYXVsdDsKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6
On5UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmKCkgPSBkZWZhdWx0OworCit2
b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmFjdGl2YXRlT25Db21w
b3NpdGluZ1RocmVhZChDb21wb3NpdG9yKiBjb21wb3NpdG9yLCBUZXh0dXJlTWFwcGVyTGF5ZXIq
IHRhcmdldExheWVyKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoIW1fY29tcG9zaXRvclRo
cmVhZCkKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwor
I2VuZGlmCisgICAgQVNTRVJUKG1fY29tcG9zaXRvclRocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjb21wb3NpdG9yKTsKKyAgICBBU1NFUlQodGFyZ2V0TGF5ZXIpOwor
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgICAgIG1fY29t
cG9zaXRvciA9IGNvbXBvc2l0b3I7CisgICAgICAgIG1fdGFyZ2V0TGF5ZXIgPSB0YXJnZXRMYXll
cjsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1
Zjo6aW52YWxpZGF0ZSgpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworCisgICAg
bV9wZW5kaW5nTGF5ZXIgPSBudWxscHRyOworICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBudWxscHRy
OworICAgIG1fbGF5ZXJzID0geyB9OworCisgICAgbV9jb21wb3NpdG9yID0gbnVsbHB0cjsKKyAg
ICBtX3RhcmdldExheWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmOjpzd2FwQnVmZmVyKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07CisgICAgaWYgKCFtX3RhcmdldExheWVyIHx8ICFtX3BlbmRpbmdMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2aW91c0xheWVyID0gV1RGTW92ZShtX2NvbW1p
dHRlZExheWVyKTsKKyAgICBtX2NvbW1pdHRlZExheWVyID0gV1RGTW92ZShtX3BlbmRpbmdMYXll
cik7CisgICAgbV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllcihtX2NvbW1pdHRlZExheWVy
LmdldCgpKTsKKworICAgIC8vIEF2b2lkIGFueSBmdW5reSBzaXR1YXRpb24gd2hlcmUgdGhlIHR3
byBsYXllcnMgYXJlIHRoZSBzYW1lLgorICAgIGlmIChwcmV2aW91c0xheWVyICYmIHByZXZpb3Vz
TGF5ZXIgIT0gbV9jb21taXR0ZWRMYXllcikKKyAgICAgICAgcHJldmlvdXNMYXllci0+cmVsZWFz
ZSgpOworCisgICAgaWYgKCFtX2NvbW1pdHRlZExheWVyLT5tX2ltYWdlRGF0YSkKKyAgICAgICAg
bV9jb21taXR0ZWRMYXllci0+bV9pbWFnZURhdGEgPSBETUFCdWZMYXllcjo6Y3JlYXRlRUdMSW1h
Z2VEYXRhKG1fY29tbWl0dGVkTGF5ZXItPm1fb2JqZWN0KTsKKyAgICBtX2NvbW1pdHRlZExheWVy
LT5tX2FnZSA9IDA7CisKKyAgICBhdXRvJiBjb21taXR0ZWRPYmplY3QgPSBtX2NvbW1pdHRlZExh
eWVyLT5tX29iamVjdDsKKyAgICBhdXRvIGlzU3RhbGVMYXllciA9CisgICAgICAgIFsmXShhdXRv
JiBsYXllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxheWVyLm1fYWdlID4gRE1B
QnVmTGF5ZXI6OmNfbWF4aW11bUFnZQorICAgICAgICAgICAgICAgIHx8ICEobGF5ZXIubV9vYmpl
Y3Qud2lkdGggPT0gY29tbWl0dGVkT2JqZWN0LndpZHRoICYmIGxheWVyLm1fb2JqZWN0LmhlaWdo
dCA9PSBjb21taXR0ZWRPYmplY3QuaGVpZ2h0KTsKKyAgICAgICAgfTsKKworICAgIGJvb2wgaGFz
U3RhbGVMYXllcnMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2xheWVycy5iZWdpbigp
OyBpdCAhPSBtX2xheWVycy5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvJiBsYXllciA9IGl0
LT52YWx1ZTsKKyAgICAgICAgKytsYXllci0+bV9hZ2U7CisgICAgICAgIGhhc1N0YWxlTGF5ZXJz
IHw9IGlzU3RhbGVMYXllcihsYXllci5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKGhhc1N0YWxl
TGF5ZXJzKSB7CisgICAgICAgIExheWVyTWFwIHVwZGF0ZWRMYXllcnM7CisgICAgICAgIGZvciAo
YXV0byBpdCA9IG1fbGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0KSB7
CisgICAgICAgICAgICBpZiAoIWlzU3RhbGVMYXllcihpdC0+dmFsdWUuZ2V0KCkpKQorICAgICAg
ICAgICAgICAgIHVwZGF0ZWRMYXllcnMuYWRkKGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5UmVmKCkp
OworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXJzID0gV1RGTW92ZSh1cGRhdGVkTGF5ZXJzKTsK
KyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6
cHVzaERNQUJ1ZihSZWY8RE1BQnVmTGF5ZXI+JiYgZG1hYnVmTGF5ZXIpCit7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICAvLyBBdm9pZCBhbnkgZnVua3kgc2l0dWF0aW9uIHdo
ZXJlIHRoZSB0d28gbGF5ZXJzIGFyZSB0aGUgc2FtZS4KKyAgICBpZiAobV9wZW5kaW5nTGF5ZXIg
JiYgbV9wZW5kaW5nTGF5ZXIgIT0gZG1hYnVmTGF5ZXIucHRyKCkpCisgICAgICAgIG1fcGVuZGlu
Z0xheWVyLT5yZWxlYXNlKCk7CisKKyAgICBtX3BlbmRpbmdMYXllciA9IFdURk1vdmUoZG1hYnVm
TGF5ZXIpOworICAgIGlmIChtX2NvbXBvc2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvci0+b25O
ZXdCdWZmZXJBdmFpbGFibGUoKTsKK30KKworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkRNQUJ1ZkxheWVyKERNQUJ1Zk9iamVjdCYmIG9iamVjdCwg
VGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncykKKyAgICA6IG1fb2JqZWN0KFdURk1vdmUob2Jq
ZWN0KSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCit7IH0KKworVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6On5ETUFCdWZMYXllcigpCit7CisgICAgbV9v
YmplY3QgPSBETUFCdWZPYmplY3QoMCk7CisKKyAgICBpZiAobV9pbWFnZURhdGEpIHsKKyAgICAg
ICAgYXV0byYgZGF0YSA9ICptX2ltYWdlRGF0YTsKKyAgICAgICAgaWYgKCEhZGF0YS5udW1JbWFn
ZXMpIHsKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoZGF0YS5udW1JbWFnZXMsIGRhdGEu
dGV4dHVyZS5kYXRhKCkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS5udW1JbWFnZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhLmltYWdlW2ld
ICE9IEVHTF9OT19JTUFHRV9LSFIpIHsKKyAgICAgICAgICAgICAgICAgICAgZWdsRGVzdHJveUlt
YWdlS0hSKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuZWds
RGlzcGxheSgpLCBkYXRhLmltYWdlW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5pbWFn
ZVtpXSA9IEVHTF9OT19JTUFHRV9LSFI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIG1faW1hZ2VEYXRhID0gbnVsbHB0cjsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6cGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICghbV9pbWFnZURhdGEpCisgICAgICAg
IHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJHTCYgdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxU
ZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKTsKKyAgICBhdXRvJiBkYXRhID0gKm1faW1h
Z2VEYXRhOworCisgICAgc3dpdGNoIChtX29iamVjdC5mb3JtYXQuZm91cmNjKSB7CisgICAgY2Fz
ZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJHQjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6WEJHUjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4
ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QUJHUjg4ODg6CisgICAgICAgIHRl
eG1hcEdMLmRyYXdUZXh0dXJlKGRhdGEudGV4dHVyZVswXSwgbV9mbGFncywgSW50U2l6ZShkYXRh
LndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Okk0MjA6
CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQ0NDoKKyAgICBjYXNlIERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpZNDFCOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MkI6
CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVYxMjoKKyAgICBjYXNlIERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpBNDIwOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMTI6
CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMToKKyAgICBjYXNlIERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpZVVkyOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlVZVlk6
CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6VlVZQToKKyAgICBjYXNlIERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpZVllVOgorICAgICAgICAvLyBUT0RPOiBZVVYgc3VwcG9ydCwgcG9zc2li
bGUgd2hlbiBkaWZmZXJlbnQgY29sb3JzcGFjZXMgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6
OkVHTEltYWdlRGF0YT4gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1B
QnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmIG9iamVjdCkKK3sKKyAg
ICB1c2luZyBFR0xJbWFnZURhdGEgPSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhOworCisgICAgRUdMRGlzcGxheSBlZ2xEaXNw
bGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5lZ2xE
aXNwbGF5KCk7CisKKyAgICBFR0xJbWFnZUtIUiBpbWFnZVtETUFCdWZGb3JtYXQ6OmNfbWF4UGxh
bmVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFu
ZXM7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBhdHRySW5kZXggPSAwOworICAgICAgICBFR0xp
bnQgYXR0cmlidXRlc1s2NF07CisKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBF
R0xfV0lEVEg7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0gb2JqZWN0LmZvcm1h
dC5wbGFuZVdpZHRoKGksIG9iamVjdC53aWR0aCk7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0cklu
ZGV4KytdID0gRUdMX0hFSUdIVDsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBv
YmplY3QuZm9ybWF0LnBsYW5lSGVpZ2h0KGksIG9iamVjdC5oZWlnaHQpOworICAgICAgICBhdHRy
aWJ1dGVzW2F0dHJJbmRleCsrXSA9IEVHTF9MSU5VWF9EUk1fRk9VUkNDX0VYVDsKKyAgICAgICAg
YXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xpbnQob2JqZWN0LmZvcm1hdC5wbGFuZXNbaV0u
Zm91cmNjKTsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xfRE1BX0JVRl9Q
TEFORTBfRkRfRVhUOworICAgICAgICBhdHRyaWJ1dGVzW2F0dHJJbmRleCsrXSA9IG9iamVjdC5m
ZFtpXTsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xfRE1BX0JVRl9QTEFO
RTBfT0ZGU0VUX0VYVDsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBvYmplY3Qu
b2Zmc2V0W2ldOworICAgICAgICBhdHRyaWJ1dGVzW2F0dHJJbmRleCsrXSA9IEVHTF9ETUFfQlVG
X1BMQU5FMF9QSVRDSF9FWFQ7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0gb2Jq
ZWN0LnN0cmlkZVtpXTsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xfTk9O
RTsKKworICAgICAgICBpbWFnZVtpXSA9IGVnbENyZWF0ZUltYWdlS0hSKGVnbERpc3BsYXksIEVH
TF9OT19DT05URVhULCBFR0xfTElOVVhfRE1BX0JVRl9FWFQsIG51bGxwdHIsIGF0dHJpYnV0ZXMp
OworICAgIH0KKworICAgIGF1dG8gaW1hZ2VEYXRhID0gbWFrZVVuaXF1ZTxFR0xJbWFnZURhdGE+
KCk7CisgICAgYXV0byYgZGF0YSA9ICppbWFnZURhdGE7CisgICAgZGF0YS53aWR0aCA9IG9iamVj
dC53aWR0aDsKKyAgICBkYXRhLmhlaWdodCA9IG9iamVjdC5oZWlnaHQ7CisgICAgZGF0YS5udW1J
bWFnZXMgPSBvYmplY3QuZm9ybWF0Lm51bVBsYW5lczsKKyAgICBnbEdlblRleHR1cmVzKGRhdGEu
bnVtSW1hZ2VzLCBkYXRhLnRleHR1cmUuZGF0YSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGF0YS5udW1JbWFnZXM7ICsraSkgeworICAgICAgICBkYXRhLmltYWdlW2ldID0gaW1h
Z2VbaV07CisKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBkYXRhLnRleHR1
cmVbaV0pOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbEVHTEltYWdlVGFyZ2V0VGV4
dHVyZTJET0VTKEdMX1RFWFRVUkVfMkQsIGRhdGEuaW1hZ2VbaV0pOworICAgICAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIHJldHVybiBpbWFnZURhdGE7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eURNQUJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzBiZGFjYTZkMmRiZTEwOTUxZWNlODNkZTc2
NWMwYTczMmE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oCkBA
IC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1
ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1
ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgZmluYWwgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1ZigpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWYoKTsKKworICAgIGJvb2wgaXNETUFCdWZCYXNlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWN0aXZhdGVPbkNvbXBvc2l0aW5n
VGhyZWFkKENvbXBvc2l0b3IqLCBUZXh0dXJlTWFwcGVyTGF5ZXIqKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN3YXBCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIGNsYXNzIERNQUJ1ZkxheWVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERNQUJ1ZkxheWVyPiwgcHVibGljIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBETUFCdWZMYXllcihETUFCdWZPYmplY3QmJiwgVGV4dHVy
ZU1hcHBlckdMOjpGbGFncyA9IDApOworICAgICAgICB2aXJ0dWFsIH5ETUFCdWZMYXllcigpOwor
CisgICAgICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgg
PSB7IH0sIGZsb2F0IG9wYWNpdHkgPSAxLjApIGZpbmFsOworCisgICAgICAgIHZvaWQgcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LnJlbGVhc2VGbGFnLnJlbGVhc2Uo
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY7CisKKyAgICAgICAgc3RydWN0IEVHTElt
YWdlRGF0YTsKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IGNy
ZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmKTsKKworICAgICAgICBETUFCdWZPYmplY3Qg
bV9vYmplY3Q7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IG1faW1hZ2VE
YXRhOworICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjX21heGltdW1BZ2UgeyAxNiB9OworICAgICAgICB1
bnNpZ25lZCBtX2FnZSB7IDAgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4K
KyAgICB2b2lkIHB1c2hETUFCdWYoRE1BQnVmT2JqZWN0JiYgZG1hYnVmT2JqZWN0LCBjb25zdCBG
JiBjb25zdHJ1Y3RvciwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IDApCisgICAgewor
ICAgICAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fbGF5ZXJzLmVuc3VyZShkbWFidWZPYmplY3QuaGFuZGxlLAorICAgICAgICAgICAgWyZdIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBETUFCdWZMYXllcihjb25zdHJ1
Y3RvcihXVEZNb3ZlKGRtYWJ1Zk9iamVjdCkpLCBmbGFncykpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIHB1c2hETUFCdWYocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHB1c2hETUFCdWYoUmVmPERNQUJ1ZkxheWVyPiYmKTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2NvbXBvc2l0b3JUaHJlYWQ7
CisjZW5kaWYKKworICAgIHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1aW50cHRyX3QsIFJlZjxE
TUFCdWZMYXllcj4sIFdURjo6RGVmYXVsdEhhc2g8dWludHB0cl90PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50cHRyX3Q+PjsKKyAgICBMYXllck1hcCBtX2xheWVyczsK
KworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9wZW5kaW5nTGF5ZXI7CisgICAgUmVmUHRyPERN
QUJ1ZkxheWVyPiBtX2NvbW1pdHRlZExheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1RFWFRVUkVNQVBQRVJfUExBVEZPUk1MQVlFUlBS
T1hZKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGlzRE1BQnVmQmFzZWQo
KSk7CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453709</attachid>
            <date>2022-03-03 01:23:13 -0800</date>
            <delta_ts>2022-03-03 06:46:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237328-20220303102311.patch</filename>
            <type>text/plain</type>
            <size>40804</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc2NGVlYjFiMjMyYjdk
ODdjZDE2MTg3MmVkYmRkMzJjYzA3NTA2Zi4uMjQzZWVlZTRkNjFhNzcyNzdmMTU5MjJkNGU0MzQ1
OWMxMjAwMDU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIyLTAzLTAzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFk
ZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzczMjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwgYSBUZXh0dXJlTWFwcGVyIHByb3h5CisgICAgICAgIGlt
cGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwbGF0Zm9ybSBsYXllcnMgYmFja2VkIGJ5IGRtYWJ1
ZiBvYmplY3RzLgorICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZGlzcGxheSBv
ZiBkbWFidWYgcHJvZHVjZXJzIGxpa2UgR1N0cmVhbWVyCisgICAgICAgIHBpcGVsaW5lcyBvciBB
TkdMRS1iYWNrZWQgV2ViR0wgY29udGV4dHMuIFRoZSBETUFCdWZMYXllciBjbGFzcyBpcyB0aGUK
KyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgb2JqZWN0LCBoYW5kbGluZyBkaXNwbGF5IG9mIHRoZSBh
Y3R1YWwgZG1hYnVmLiBUaGUgcHJveHkKKyAgICAgICAgaXRzZWxmIGlzIHRhc2tlZCB3aXRoIGNy
ZWF0aW5nIGFuZCBjYWNoaW5nIHN1Y2ggbGF5ZXJzIGZvciBhbnkgZG1hYnVmCisgICAgICAgIG9i
amVjdCB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgcHJvZHVjZXIuCisKKyAgICAgICAgRm9yIGVh
Y2ggZG1hYnVmIG9iamVjdCBwdXNoZWQgaW50byB0aGUgcHJveHksIHRoZSBhY2NvcmRpbmcgRE1B
QnVmTGF5ZXIKKyAgICAgICAgb2JqZWN0IGlzIHNwYXduZWQgYW5kIGNhY2hlZCBmb3IgZnV0dXJl
IHJldXNlLCBleHBlY3RpbmcgdGhlIHByb2R1Y2VyCisgICAgICAgIHRvIGJlIGFibGUgdG8gcHJv
dmlkZSBkbWFidWZzIGZyb20gYSBwb29sIG9yIHN3YXBjaGFpbiBvZiB0aGVzZSBvYmplY3RzLgor
ICAgICAgICBUaGUgY2FjaGUgaXMgZW1wdGllZCB3aGVuZXZlciBkbWFidWZzIGdvIHVudXNlZCBm
b3IgYSBjZXJ0YWluIGFtb3VudCBvZgorICAgICAgICBzd2Fwcywgb3IgaWYgdGhlIHNpemUgb2Yg
dGhlIHByb3ZpZGVkIGRtYWJ1ZnMgY2hhbmdlcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIGNl
cnRhaW4gZG1hYnVmLW9yaWVudGVkIGZhY2lsaXRpZXMgYXJlIGFkZGVkLgorCisgICAgICAgIERN
QUJ1ZkZvcm1hdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgZGlmZmVyZW50IERSTSBmb3JtYXRz
LCBmb3IKKyAgICAgICAgaW5zdGFuY2UgaG93IGRpZmZlcmVudCBwbGFuZXMgZm9yIHNwZWNpZmlj
IGZvcm1hdHMgYXJlIGZvcm1hdHRlZCBhbmQKKyAgICAgICAgc2l6ZWQuCisKKyAgICAgICAgRE1B
QnVmT2JqZWN0IGlzIGEgY2xhc3MgdGhhdCBoYW5kbGVzIGEgZ2l2ZW4gZ3JvdXBpbmcgb2YgZG1h
YnVmcworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQuIEl0IGhhcyBh
biBhc3NvY2lhdGVkIGhhbmRsZSB2YWx1ZSwKKyAgICAgICAgc2l6ZSwgYW5kIHBlci1wbGFuZSBk
bWFidWYgZmlsZSBkZXNjcmlwdG9ycywgb2Zmc2V0cywgc3RyaWRlcyBhbmQKKyAgICAgICAgbW9k
aWZpZXJzLCBhbG9uZyB3aXRoIGEgRE1BQnVmUmVsZWFzZUZsYWcgaW5zdGFuY2UuCisKKyAgICAg
ICAgRE1BQnVmUmVsZWFzZUZsYWcgb2JqZWN0cyBhcmUgdXNlZCBhcyBhbiBldmVudGZkLWJhc2Vk
IHJlbGVhc2UgbWVjaGFuaXNtCisgICAgICAgIHRoYXQgaW5kaWNhdGVzIHRvIHRoZSBwcm9kdWNl
ciB0aGF0IHRoZSBnaXZlbiBETUFCdWZPYmplY3QgaGFzIGJlZW4KKyAgICAgICAgcHJlc2VudGVk
IGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzZWQgYW5kIGlzIHRodXMgYXZhaWxhYmxlIGZvciByZXVz
ZS4KKworICAgICAgICBUaGlzIGlzIGEgcHJvdmlzaW9uYWwgaW50cm9kdWN0aW9uIG9mIHRoZXNl
IGZhY2lsaXRpZXMgaW50byB0aGUgdHJlZSwKKyAgICAgICAgd2l0aCBjZXJ0YWluIGJlaGF2aW9y
IChlLmcuIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBZVVYgZm9ybWF0cyBpbiB0aGUKKyAgICAgICAg
RE1BQnVmTGF5ZXIgY2xhc3MpIHN0aWxsIHBlbmRpbmcuIEludGVncmF0aW9uIHdpdGggcHJvZHVj
ZXJzIChsaWtlIHRoZQorICAgICAgICBETUFCdWZWaWRlb1NpbmsgaW4gdGhlIEdTdHJlYW1lciBw
aXBlbGluZSkgZm9sbG93cy4KKworICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQyk6Cisg
ICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6OnBsYW5lV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0OjpwbGFuZUhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpETUFCdWZGb3JtYXQ6OlBsYW5lOjpQbGFuZSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkEpOgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmRm9ybWF0SW1wbDo6ZGVmaW5lUGxhbmUpOgorICAgICAgICAoV2ViQ29yZTo6RE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6RE1BQnVmT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6fkRNQUJ1Zk9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZPYmplY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFnLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmUmVsZWFzZUZsYWc6OkRNQUJ1ZlJlbGVhc2VGbGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjp+RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZSZWxlYXNlRmxhZzo6ZHVwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJl
bGVhc2VGbGFnOjpyZWxlYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxl
YXNlRmxhZzo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUltYWdlS0hSKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lJbWFn
ZUtIUik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpzd2Fw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWY6OnB1c2hETUFCdWYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkRNQUJ1ZkxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1
ZkxheWVyOjp+RE1BQnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmg6
IEFkZGVkLgorCiAyMDIyLTAzLTAyICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxl
LmNvbT4KIAogICAgICAgICBJVE06IENoZWNrYm94IHN0YXRlIGNoYW5nZSBpcyBub3QgdXBkYXRl
ZCBpbiBpc29sYXRlZCB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZQppbmRleCA0ZTBhZWJlMTk3NDc3ODhkNjQwZGM5OTVhNjZjNDNiYmEyYzkxODE2Li43
M2Y2OWM1MDk0NzBlZjhhZTk3OWNjZDk3ZDYxYTBmNzg4YTU0N2Y1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTM0LDYgKzM0LDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5UHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU29saWRDb2xvckxheWVyLmgKQEAgLTYwLDYgKzYxLDcgQEAgaWYgKFVTRV9DT09S
RElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJEbWFidWYuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1Zi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9y
bWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmMxZGY5OTU2MDkwZWQ0NjU3YjQ1Yzc4OTRkYWFkZThjZjdmMzEwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9E
TUFCdWZGb3JtYXQuaApAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNs
dWRlIDxjc3RkaW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBETUFCdWZG
b3JtYXRJbXBsIHsKKworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjcmVhdGVGb3VyQ0MoY2hh
ciBhLCBjaGFyIGIsIGNoYXIgYywgY2hhciBkKQoreworICAgIHJldHVybiB1aW50MzJfdChhKSB8
ICh1aW50MzJfdChiKSA8PCA4KSB8ICh1aW50MzJfdChjKSA8PCAxNikgfCAodWludDMyX3QoZCkg
PDwgMjQpOworfQorCit9CisKK3N0cnVjdCBETUFCdWZGb3JtYXQgeworICAgIGVudW0gY2xhc3Mg
Rm91ckNDIDogdWludDMyX3QgeworICAgICAgICBJbnZhbGlkID0gMCwKKworICAgICAgICBSOCA9
IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICc4JywgJyAnLCAnICcpLAorICAg
ICAgICBHUjg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdHJywgJ1InLCAnOCcs
ICc4JyksCisKKyAgICAgICAgWFJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3Vy
Q0MoJ1gnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgWEJHUjg4ODggPSBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVGb3VyQ0MoJ1gnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCWDg4ODgg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnWCcsICcyJywgJzQnKSwKKyAg
ICAgICAgQkdSWDg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAnWCcs
ICcyJywgJzQnKSwKKyAgICAgICAgQVJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVG
b3VyQ0MoJ0EnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgQUJHUjg4ODggPSBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCQTg4
ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnQScsICcyJywgJzQnKSwK
KyAgICAgICAgQkdSQTg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAn
QScsICcyJywgJzQnKSwKKyAgICAgICAgUkdCODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRl
Rm91ckNDKCdSJywgJ0cnLCAnMicsICc0JyksCisgICAgICAgIEJHUjg4OCA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdHJywgJzInLCAnNCcpLAorCisgICAgICAgIEk0MjAg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0knLCAnNCcsICcyJywgJzAnKSwKKyAg
ICAgICAgWVYxMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJzEn
LCAnMicpLAorICAgICAgICBBNDIwID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdB
JywgJzQnLCAnMicsICcwJyksCisgICAgICAgIE5WMTIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ04nLCAnVicsICcxJywgJzInKSwKKyAgICAgICAgTlYyMSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzInLCAnMScpLAorCisgICAgICAgIFlVWTIg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1knLCAnVScsICdZJywgJzInKSwKKyAg
ICAgICAgWVZZVSA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJ1kn
LCAnVScpLAorICAgICAgICBVWVZZID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdV
JywgJ1knLCAnVicsICdZJyksCisgICAgICAgIFZZVVkgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1YnLCAnWScsICdVJywgJ1knKSwKKyAgICAgICAgVlVZQSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdVJywgJ1knLCAnQScpLAorICAgICAgICBBWVVWID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ1knLCAnVScsICdWJyksCisKKyAg
ICAgICAgWTQ0NCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzQn
LCAnNCcpLAorICAgICAgICBZNDFCID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJzQnLCAnMScsICdCJyksCisgICAgICAgIFk0MkIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnNCcsICcyJywgJ0InKSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBjX21heFBsYW5lcyA9IDQ7CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0M+IHN0
YXRpYyBETUFCdWZGb3JtYXQgY3JlYXRlKCkgPSBkZWxldGU7CisgICAgc3RhdGljIERNQUJ1ZkZv
cm1hdCBjcmVhdGUodWludDMyX3QpOworCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJjY1ZhbHVl
LCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KKyAgICBzdGF0aWMgRE1BQnVmRm9y
bWF0IGluc3RhbnRpYXRlKCk7CisKKyAgICBGb3VyQ0MgZm91cmNjIHsgRm91ckNDOjpJbnZhbGlk
IH07CisgICAgdW5zaWduZWQgbnVtUGxhbmVzIHsgMCB9OworCisgICAgdWludDMyX3QgcGxhbmVX
aWR0aCh1bnNpZ25lZCBwbGFuZUluZGV4LCB1aW50MzJfdCB3aWR0aCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAod2lkdGggPj4gcGxhbmVzW3BsYW5lSW5kZXhdLmhvcml6b250YWxTdWJz
YW1wbGluZyk7CisgICAgfQorCisgICAgdWludDMyX3QgcGxhbmVIZWlnaHQodW5zaWduZWQgcGxh
bmVJbmRleCwgdWludDMyX3QgaGVpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICho
ZWlnaHQgPj4gcGxhbmVzW3BsYW5lSW5kZXhdLnZlcnRpY2FsU3Vic2FtcGxpbmcpOworICAgIH0K
KworICAgIHRlbXBsYXRlPEZvdXJDQyBmb3VyY2NWYWx1ZSwgdW5zaWduZWQgaHNWYWx1ZSwgdW5z
aWduZWQgdnNWYWx1ZT4KKyAgICBzdHJ1Y3QgUGxhbmVEZWZpbml0aW9uIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBGb3VyQ0MgZm91cmNjID0gZm91cmNjVmFsdWU7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgaG9yaXpvbnRhbFN1YnNhbXBsaW5nID0gaHNWYWx1ZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB2ZXJ0aWNhbFN1YnNhbXBsaW5nID0gdnNW
YWx1ZTsKKyAgICB9OworCisgICAgc3RydWN0IFBsYW5lIHsKKyAgICAgICAgUGxhbmUoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGxhbmVEZWZpdGlvblR5cGU+Cisg
ICAgICAgIFBsYW5lKGNvbnN0IFBsYW5lRGVmaXRpb25UeXBlJikKKyAgICAgICAgICAgIDogZm91
cmNjKFBsYW5lRGVmaXRpb25UeXBlOjpmb3VyY2MpCisgICAgICAgICAgICAsIGhvcml6b250YWxT
dWJzYW1wbGluZyhQbGFuZURlZml0aW9uVHlwZTo6aG9yaXpvbnRhbFN1YnNhbXBsaW5nKQorICAg
ICAgICAgICAgLCB2ZXJ0aWNhbFN1YnNhbXBsaW5nKFBsYW5lRGVmaXRpb25UeXBlOjp2ZXJ0aWNh
bFN1YnNhbXBsaW5nKQorICAgICAgICB7IH0KKworICAgICAgICBGb3VyQ0MgZm91cmNjIHsgRm91
ckNDOjpJbnZhbGlkIH07CisgICAgICAgIHVuc2lnbmVkIGhvcml6b250YWxTdWJzYW1wbGluZyB7
IDAgfTsKKyAgICAgICAgdW5zaWduZWQgdmVydGljYWxTdWJzYW1wbGluZyB7IDAgfTsKKyAgICB9
OworICAgIHN0ZDo6YXJyYXk8UGxhbmUsIGNfbWF4UGxhbmVzPiBwbGFuZXM7Cit9OworCituYW1l
c3BhY2UgRE1BQnVmRm9ybWF0SW1wbCB7CisKK3RlbXBsYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckND
IGZvdXJjY1ZhbHVlPgoraW5saW5lIERNQUJ1ZkZvcm1hdCBjcmVhdGVTaW5nbGVQbGFuZVJHQkEo
KQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPGZvdXJjY1ZhbHVlLAor
ICAgICAgICBETUFCdWZGb3JtYXQ6OlBsYW5lRGVmaW5pdGlvbjxmb3VyY2NWYWx1ZSwgMCwgMD4+
KCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBJbmRleCwgc2l6ZV90IFNpemUsIHR5cGVuYW1lIFBs
YW5lRGVmaW5pdGlvblR5cGUsIHR5cGVuYW1lLi4uIFBsYW5lRGVmaW5pdGlvblR5cGVzPgordm9p
ZCBkZWZpbmVQbGFuZShzdGQ6OmFycmF5PERNQUJ1ZkZvcm1hdDo6UGxhbmUsIERNQUJ1ZkZvcm1h
dDo6Y19tYXhQbGFuZXM+JiBwbGFuZXMpCit7CisgICAgbmV3ICgmcGxhbmVzW0luZGV4XSkgRE1B
QnVmRm9ybWF0OjpQbGFuZShQbGFuZURlZmluaXRpb25UeXBlIHsgfSk7CisgICAgaWYgY29uc3Rl
eHByICgoSW5kZXggKyAxKSA8IFNpemUpCisgICAgICAgIGRlZmluZVBsYW5lPEluZGV4ICsgMSwg
U2l6ZSwgUGxhbmVEZWZpbml0aW9uVHlwZXMuLi4+KHBsYW5lcyk7Cit9CisKK30KKwordGVtcGxh
dGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0MgZm91cmNjVmFsdWUsIHR5cGVuYW1lLi4uIFBsYW5lRGVm
aW5pdGlvblR5cGVzPgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6Omluc3RhbnRp
YXRlKCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBl
cykgPD0gNCk7CisKKyAgICBETUFCdWZGb3JtYXQgZm9ybWF0OworICAgIGZvcm1hdC5mb3VyY2Mg
PSBmb3VyY2NWYWx1ZTsKKyAgICBmb3JtYXQubnVtUGxhbmVzID0gc2l6ZW9mLi4uKFBsYW5lRGVm
aW5pdGlvblR5cGVzKTsKKyAgICBETUFCdWZGb3JtYXRJbXBsOjpkZWZpbmVQbGFuZTwwLCBzaXpl
b2YuLi4oUGxhbmVEZWZpbml0aW9uVHlwZXMpLCBQbGFuZURlZmluaXRpb25UeXBlcy4uLj4oZm9y
bWF0LnBsYW5lcyk7CisgICAgcmV0dXJuIGZvcm1hdDsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WFJHQjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xl
UGxhbmVSR0JBPEZvdXJDQzo6WFJHQjg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBE
TUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhC
R1I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBs
YW5lUkdCQTxGb3VyQ0M6OlhCR1I4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1B
QnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpSR0JY
ODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFu
ZVJHQkE8Rm91ckNDOjpSR0JYODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1
ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSWDg4
ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVS
R0JBPEZvdXJDQzo6QkdSWDg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZG
b3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFSR0I4ODg4
PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdC
QTxGb3VyQ0M6OkFSR0I4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9y
bWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4OD4o
KQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8
Rm91ckNDOjpBQkdSODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1h
dCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6UkdCQTg4ODg+KCkK
K3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZv
dXJDQzo6UkdCQTg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQg
RE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkJHUkE4ODg4PigpCit7
CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3Vy
Q0M6OkJHUkE4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERN
QUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpJNDIwPigpCit7CisgICAg
cmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpJNDIwLAorICAgICAgICBQ
bGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlv
bjxGb3VyQ0M6OlI4LCAxLCAxPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6Ujgs
IDEsIDE+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZv
cm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVjEyPigpCit7CisgICAgcmV0dXJu
IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZVjEyLAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OlI4LCAxLCAxPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+
PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBNDIwPigpCit7CisgICAgcmV0dXJuIERNQUJ1
ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpBNDIwLAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4
LCAxLCAxPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAg
ICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0
OjpGb3VyQ0M6Ok5WMTI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0
ZTxGb3VyQ0M6Ok5WMTIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAw
PiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMSwgMT4+KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1B
QnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMjE+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0Ojpp
bnN0YW50aWF0ZTxGb3VyQ0M6Ok5WMjEsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6
OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMSwgMT4+
KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0Ojpj
cmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllVWTI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVm
Rm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OllVWTIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlv
bjxGb3VyQ0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVllVPigp
Cit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZVllVLAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6VVlWWT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3Rh
bnRpYXRlPEZvdXJDQzo6VVlWWSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4
OCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVm
Rm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZZVVk+KCkKK3sKKyAgICByZXR1
cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OllWWVUsCisgICAgICAgIFBsYW5l
RGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpWVVlBPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckND
OjpWVVlBLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpBQkdSODg4OCwgMCwgMD4+
KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0Ojpj
cmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFZVVY+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVm
Rm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlZVWUEsCisgICAgICAgIFBsYW5lRGVmaW5pdGlv
bjxGb3VyQ0M6OkFCR1I4ODg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERN
QUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQ0
ND4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6WTQ0
NCwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQ
bGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlv
bjxGb3VyQ0M6OlI4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZv
cm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQxQj4oKQor
eworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6WTQxQiwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpSOCwgMiwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OlI4LCAyLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBE
TUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQyQj4oKQoreworICAg
IHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6WTQyQiwKKyAgICAgICAg
UGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpSOCwgMSwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4
LCAxLCAwPj4oKTsKK30KKworaW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0
ZSh1aW50MzJfdCBmb3VyY2NWYWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGZvdXJjY1ZhbHVlKSB7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlhSR0I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZTxGb3VyQ0M6OlhSR0I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpYQkdSODg4
OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpYQkdSODg4OD4oKTsKKyAgICBjYXNl
IHVpbnQzMl90KEZvdXJDQzo6UkdCWDg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJD
Qzo6UkdCWDg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkJHUlg4ODg4KToKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkJHUlg4ODg4PigpOworICAgIGNhc2UgdWludDMy
X3QoRm91ckNDOjpBUkdCODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBUkdC
ODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QUJHUjg4ODgpOgorICAgICAgICBy
ZXR1cm4gY3JlYXRlPEZvdXJDQzo6QUJHUjg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3Vy
Q0M6OlJHQkE4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlJHQkE4ODg4Pigp
OworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpCR1JBODg4OCk6CisgICAgICAgIHJldHVybiBj
cmVhdGU8Rm91ckNDOjpCR1JBODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6STQy
MCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpJNDIwPigpOworICAgIGNhc2UgdWlu
dDMyX3QoRm91ckNDOjpZVjEyKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllWMTI+
KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkE0MjApOgorICAgICAgICByZXR1cm4gY3Jl
YXRlPEZvdXJDQzo6QTQyMD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6TlYxMik6Cisg
ICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpOVjEyPigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpOVjIxKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Ok5WMjE+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllVWTIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZv
dXJDQzo6WVVZMj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WVZZVSk6CisgICAgICAg
IHJldHVybiBjcmVhdGU8Rm91ckNDOjpZVllVPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckND
OjpVWVZZKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlVZVlk+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6OlZZVVkpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
VVlWWT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VlVZQSk6CisgICAgICAgIHJldHVy
biBjcmVhdGU8Rm91ckNDOjpWVVlBPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpBWVVW
KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFZVVY+KCk7CisgICAgY2FzZSB1aW50
MzJfdChGb3VyQ0M6Olk0NDQpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WTQ0ND4o
KTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQxQik6CisgICAgICAgIHJldHVybiBjcmVh
dGU8Rm91ckNDOjpZNDFCPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpZNDJCKToKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Olk0MkI+KCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0RNQUJ1Zk9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RN
QUJ1Zk9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4NjQ0NDQ0Mzk0ZjdiOWQ5ZmY0M2RjYmRjMzkyYWJh
YTc3Y2M1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nYm0vRE1BQnVmT2JqZWN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIy
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE1BQnVm
Rm9ybWF0LmgiCisjaW5jbHVkZSAiRE1BQnVmUmVsZWFzZUZsYWcuaCIKKyNpbmNsdWRlIDxhcnJh
eT4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERNQUJ1Zk9iamVjdCB7Cisg
ICAgRE1BQnVmT2JqZWN0KHVpbnRwdHJfdCBoYW5kbGUpCisgICAgICAgIDogaGFuZGxlKGhhbmRs
ZSkKKyAgICB7IH0KKworICAgIH5ETUFCdWZPYmplY3QoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1hdC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAg
aWYgKGZkW2ldICE9IC0xKQorICAgICAgICAgICAgICAgIGNsb3NlKGZkW2ldKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIERNQUJ1Zk9iamVjdChjb25zdCBETUFCdWZPYmplY3QmKSA9IGRlbGV0
ZTsKKyAgICBETUFCdWZPYmplY3QmIG9wZXJhdG9yPShjb25zdCBETUFCdWZPYmplY3QmKSA9IGRl
bGV0ZTsKKworICAgIERNQUJ1Zk9iamVjdChETUFCdWZPYmplY3QmJiBvKQorICAgICAgICA6IGhh
bmRsZShvLmhhbmRsZSkKKyAgICAgICAgLCBmb3JtYXQoby5mb3JtYXQpCisgICAgICAgICwgd2lk
dGgoby53aWR0aCkKKyAgICAgICAgLCBoZWlnaHQoby5oZWlnaHQpCisgICAgICAgICwgcmVsZWFz
ZUZsYWcoV1RGTW92ZShvLnJlbGVhc2VGbGFnKSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgICAgIGZkW2ld
ID0gby5mZFtpXTsKKyAgICAgICAgICAgIG8uZmRbaV0gPSAtMTsKKworICAgICAgICAgICAgb2Zm
c2V0W2ldID0gby5vZmZzZXRbaV07CisgICAgICAgICAgICBzdHJpZGVbaV0gPSBvLnN0cmlkZVtp
XTsKKyAgICAgICAgICAgIG1vZGlmaWVyW2ldID0gby5tb2RpZmllcltpXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIERNQUJ1Zk9iamVjdCYgb3BlcmF0b3I9KERNQUJ1Zk9iamVjdCYmIG8pCisg
ICAgeworICAgICAgICBpZiAodGhpcyA9PSAmbykKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KworICAgICAgICB0aGlzLT5+RE1BQnVmT2JqZWN0KCk7CisgICAgICAgIG5ldyAodGhpcykgRE1B
QnVmT2JqZWN0KFdURk1vdmUobykpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgdWludHB0cl90IGhhbmRsZSB7IDAgfTsKKyAgICBETUFCdWZGb3JtYXQgZm9ybWF0IHsgfTsK
KyAgICB1aW50MzJfdCB3aWR0aCB7IDAgfTsKKyAgICB1aW50MzJfdCBoZWlnaHQgeyAwIH07Cisg
ICAgRE1BQnVmUmVsZWFzZUZsYWcgcmVsZWFzZUZsYWcgeyB9OworICAgIHN0ZDo6YXJyYXk8aW50
LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBmZCB7IC0xLCAtMSwgLTEsIC0xIH07CisgICAg
c3RkOjphcnJheTxzaXplX3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IG9mZnNldCB7IDAs
IDAsIDAsIDAgfTsKKyAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBETUFCdWZGb3JtYXQ6OmNfbWF4
UGxhbmVzPiBzdHJpZGUgeyAwLCAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTx1aW50NjRfdCwg
RE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gbW9kaWZpZXIgeyAwLCAwLCAwLCAwIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmUmVsZWFzZUZsYWcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZSZWxlYXNlRmxhZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmNGQ3
NzYwMDUzZjk5YzU1ODc2NTBhMDg2YWFiOTcxMDQ4NzVmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmUmVsZWFzZUZsYWcuaApA
QCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDx3dGYv
VW5pU3RkRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERNQUJ1ZlJl
bGVhc2VGbGFnIHsKKyAgICBETUFCdWZSZWxlYXNlRmxhZygpID0gZGVmYXVsdDsKKworICAgIGVu
dW0gSW5pdGlhbGl6ZVRhZyB7IEluaXRpYWxpemUgfTsKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhJ
bml0aWFsaXplVGFnKQorICAgIHsKKyAgICAgICAgZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVD
IHwgRUZEX05PTkJMT0NLKTsKKyAgICB9CisKKyAgICB+RE1BQnVmUmVsZWFzZUZsYWcoKQorICAg
IHsKKyAgICAgICAgaWYgKGZkICE9IC0xKQorICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAg
ICBmZCA9IC0xOworICAgIH0KKworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKGNvbnN0IERNQUJ1ZlJl
bGVhc2VGbGFnJikgPSBkZWxldGU7CisgICAgRE1BQnVmUmVsZWFzZUZsYWcmIG9wZXJhdG9yPShj
b25zdCBETUFCdWZSZWxlYXNlRmxhZyYpID0gZGVsZXRlOworCisgICAgRE1BQnVmUmVsZWFzZUZs
YWcoRE1BQnVmUmVsZWFzZUZsYWcmJiBvKQorICAgIHsKKyAgICAgICAgZmQgPSBvLmZkOworICAg
ICAgICBvLmZkID0gLTE7CisgICAgfQorCisgICAgRE1BQnVmUmVsZWFzZUZsYWcmIG9wZXJhdG9y
PShETUFCdWZSZWxlYXNlRmxhZyYmIG8pCisgICAgeworICAgICAgICBpZiAodGhpcyA9PSAmbykK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICB0aGlzLT5+RE1BQnVmUmVsZWFz
ZUZsYWcoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBETUFCdWZSZWxlYXNlRmxhZyhXVEZNb3ZlKG8p
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIERNQUJ1ZlJlbGVhc2VGbGFn
IGR1cCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgICAgIERNQUJ1ZlJlbGVhc2VGbGFnIGZsYWc7CisgICAgICAgIGZs
YWcuZmQgPSBkdXBDbG9zZU9uRXhlYyhmZCk7CisgICAgICAgIHJldHVybiBmbGFnOworICAgIH0K
KworICAgIGJvb2wgcmVsZWFzZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGZkID09IC0x
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgdWludDY0X3QgdmFsdWUgeyAw
IH07CisgICAgICAgIGlmIChyZWFkKGZkLCAmdmFsdWUsIHNpemVvZih1aW50NjRfdCkpID09IHNp
emVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gISF2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZSgpCisgICAgeworICAgICAgICBp
ZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdWludDY0X3QgdmFs
dWUgeyAxIH07CisgICAgICAgIHdyaXRlKGZkLCAmdmFsdWUsIHNpemVvZih1aW50NjRfdCkpOwor
ICAgIH0KKworICAgIGludCBmZCB7IC0xIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1Zi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNThlNGViNjY2M2M1NDc0NDY1YTFhNTQ0ODkwZGFjOGE1MDBj
MDBkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcApAQCAtMCww
ICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJzLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVy
LmgiCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmIFVTRShM
SUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWds
Lmg+CisjaW5jbHVkZSA8RUdML2VnbGV4dC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQyBjcmVhdGVJbWFnZUtIUigpCit7
CisgICAgc3RhdGljIFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQyBzX2NyZWF0ZUltYWdlS0hSOwor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX2ZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc19m
bGFnLAorICAgICAgICBbJl0geworICAgICAgICAgICAgc19jcmVhdGVJbWFnZUtIUiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZORUdMQ1JFQVRFSU1BR0VLSFJQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygi
ZWdsQ3JlYXRlSW1hZ2VLSFIiKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBzX2NyZWF0ZUlt
YWdlS0hSOworfQorCitzdGF0aWMgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQyBkZXN0cm95SW1h
Z2VLSFIoKQoreworICAgIHN0YXRpYyBQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DIHNfZGVzdHJv
eUltYWdlS0hSOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX2ZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uoc19mbGFnLAorICAgICAgICBbJl0geworICAgICAgICAgICAgc19kZXN0cm95SW1h
Z2VLSFIgPSByZWludGVycHJldF9jYXN0PFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0M+KGVnbEdl
dFByb2NBZGRyZXNzKCJlZ2xEZXN0cm95SW1hZ2VLSFIiKSk7CisgICAgICAgIH0pOworICAgIHJl
dHVybiBzX2Rlc3Ryb3lJbWFnZUtIUjsKK30KKworc3RydWN0IFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpFR0xJbWFnZURhdGEgeworICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9Owor
ICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICB1bnNpZ25lZCBudW1JbWFnZXMgeyAwIH07
CisgICAgc3RkOjphcnJheTxHTHVpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHRleHR1
cmUgeyAwLCAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTxFR0xJbWFnZUtIUiwgRE1BQnVmRm9y
bWF0OjpjX21heFBsYW5lcz4gaW1hZ2UgeyBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1BR0Vf
S0hSLCBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1BR0VfS0hSIH07Cit9OworCitUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmKCkgPSBkZWZhdWx0OworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eURNQUJ1Zjo6flRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRlZmF1
bHQ7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6YWN0aXZh
dGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqIGNvbXBvc2l0b3IsIFRleHR1cmVNYXBw
ZXJMYXllciogdGFyZ2V0TGF5ZXIpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICghbV9jb21w
b3NpdG9yVGhyZWFkKQorICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWQgPSAmVGhyZWFkOjpjdXJy
ZW50KCk7CisjZW5kaWYKKyAgICBBU1NFUlQobV9jb21wb3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNvbXBvc2l0b3IpOworICAgIEFTU0VSVCh0YXJnZXRM
YXllcik7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAg
ICAgbV9jb21wb3NpdG9yID0gY29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRh
cmdldExheWVyOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5RE1BQnVmOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07
CisKKyAgICBtX3BlbmRpbmdMYXllciA9IG51bGxwdHI7CisgICAgbV9jb21taXR0ZWRMYXllciA9
IG51bGxwdHI7CisgICAgbV9sYXllcnMgPSB7IH07CisKKyAgICBtX2NvbXBvc2l0b3IgPSBudWxs
cHRyOworICAgIG1fdGFyZ2V0TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OnN3YXBCdWZmZXIoKQoreworICAgIExvY2tlciBs
b2NrZXIgeyBtX2xvY2sgfTsKKyAgICBpZiAoIW1fdGFyZ2V0TGF5ZXIgfHwgIW1fcGVuZGluZ0xh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3VzTGF5ZXIgPSBXVEZNb3Zl
KG1fY29tbWl0dGVkTGF5ZXIpOworICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBXVEZNb3ZlKG1fcGVu
ZGluZ0xheWVyKTsKKyAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY29tbWl0
dGVkTGF5ZXIuZ2V0KCkpOworCisgICAgLy8gQXZvaWQgYW55IGZ1bmt5IHNpdHVhdGlvbiB3aGVy
ZSB0aGUgdHdvIGxheWVycyBhcmUgdGhlIHNhbWUuCisgICAgaWYgKHByZXZpb3VzTGF5ZXIgJiYg
cHJldmlvdXNMYXllciAhPSBtX2NvbW1pdHRlZExheWVyKQorICAgICAgICBwcmV2aW91c0xheWVy
LT5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1fY29tbWl0dGVkTGF5ZXItPm1faW1hZ2VEYXRhKQor
ICAgICAgICBtX2NvbW1pdHRlZExheWVyLT5tX2ltYWdlRGF0YSA9IERNQUJ1ZkxheWVyOjpjcmVh
dGVFR0xJbWFnZURhdGEobV9jb21taXR0ZWRMYXllci0+bV9vYmplY3QpOworICAgIG1fY29tbWl0
dGVkTGF5ZXItPm1fYWdlID0gMDsKKworICAgIGF1dG8mIGNvbW1pdHRlZE9iamVjdCA9IG1fY29t
bWl0dGVkTGF5ZXItPm1fb2JqZWN0OworICAgIGF1dG8gaXNTdGFsZUxheWVyID0KKyAgICAgICAg
WyZdKGF1dG8mIGxheWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGF5ZXIubV9h
Z2UgPiBETUFCdWZMYXllcjo6Y19tYXhpbXVtQWdlCisgICAgICAgICAgICAgICAgfHwgIShsYXll
ci5tX29iamVjdC53aWR0aCA9PSBjb21taXR0ZWRPYmplY3Qud2lkdGggJiYgbGF5ZXIubV9vYmpl
Y3QuaGVpZ2h0ID09IGNvbW1pdHRlZE9iamVjdC5oZWlnaHQpOworICAgICAgICB9OworCisgICAg
Ym9vbCBoYXNTdGFsZUxheWVycyA9IGZhbHNlOworICAgIGZvciAoYXV0byBpdCA9IG1fbGF5ZXJz
LmJlZ2luKCk7IGl0ICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8mIGxh
eWVyID0gaXQtPnZhbHVlOworICAgICAgICArK2xheWVyLT5tX2FnZTsKKyAgICAgICAgaGFzU3Rh
bGVMYXllcnMgfD0gaXNTdGFsZUxheWVyKGxheWVyLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAo
aGFzU3RhbGVMYXllcnMpIHsKKyAgICAgICAgTGF5ZXJNYXAgdXBkYXRlZExheWVyczsKKyAgICAg
ICAgZm9yIChhdXRvIGl0ID0gbV9sYXllcnMuYmVnaW4oKTsgaXQgIT0gbV9sYXllcnMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmICghaXNTdGFsZUxheWVyKGl0LT52YWx1ZS5nZXQoKSkp
CisgICAgICAgICAgICAgICAgdXBkYXRlZExheWVycy5hZGQoaXQtPmtleSwgaXQtPnZhbHVlLmNv
cHlSZWYoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9sYXllcnMgPSBXVEZNb3ZlKHVwZGF0ZWRM
YXllcnMpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjpwdXNoRE1BQnVmKFJlZjxETUFCdWZMYXllcj4mJiBkbWFidWZMYXllcikKK3sKKyAg
ICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgIC8vIEF2b2lkIGFueSBmdW5reSBzaXR1
YXRpb24gd2hlcmUgdGhlIHR3byBsYXllcnMgYXJlIHRoZSBzYW1lLgorICAgIGlmIChtX3BlbmRp
bmdMYXllciAmJiBtX3BlbmRpbmdMYXllciAhPSBkbWFidWZMYXllci5wdHIoKSkKKyAgICAgICAg
bV9wZW5kaW5nTGF5ZXItPnJlbGVhc2UoKTsKKworICAgIG1fcGVuZGluZ0xheWVyID0gV1RGTW92
ZShkbWFidWZMYXllcik7CisgICAgaWYgKG1fY29tcG9zaXRvcikKKyAgICAgICAgbV9jb21wb3Np
dG9yLT5vbk5ld0J1ZmZlckF2YWlsYWJsZSgpOworfQorCitUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RE1BQnVmTGF5ZXIoRE1BQnVmT2JqZWN0JiYg
b2JqZWN0LCBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKQorICAgIDogbV9vYmplY3QoV1RG
TW92ZShvYmplY3QpKQorICAgICwgbV9mbGFncyhmbGFncykKK3sgfQorCitUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6fkRNQUJ1ZkxheWVyKCkKK3sK
KyAgICBtX29iamVjdCA9IERNQUJ1Zk9iamVjdCgwKTsKKworICAgIGlmIChtX2ltYWdlRGF0YSkg
eworICAgICAgICBhdXRvJiBkYXRhID0gKm1faW1hZ2VEYXRhOworICAgICAgICBpZiAoISFkYXRh
Lm51bUltYWdlcykgeworICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcyhkYXRhLm51bUltYWdl
cywgZGF0YS50ZXh0dXJlLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLm51bUltYWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEu
aW1hZ2VbaV0gIT0gRUdMX05PX0lNQUdFX0tIUikgeworICAgICAgICAgICAgICAgICAgICBkZXN0
cm95SW1hZ2VLSFIoKShQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLmVnbERpc3BsYXkoKSwgZGF0YS5pbWFnZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIGRh
dGEuaW1hZ2VbaV0gPSBFR0xfTk9fSU1BR0VfS0hSOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX2ltYWdlRGF0YSA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5
ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAoIW1faW1hZ2VEYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyR0wmIHRleG1hcEdMID0gc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcik7CisgICAgYXV0byYgZGF0YSA9
ICptX2ltYWdlRGF0YTsKKworICAgIHN3aXRjaCAobV9vYmplY3QuZm9ybWF0LmZvdXJjYykgewor
ICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4OgorICAgIGNhc2UgRE1BQnVm
Rm9ybWF0OjpGb3VyQ0M6OlhCR1I4ODg4OgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OkFSR0I4ODg4OgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFCR1I4ODg4OgorICAg
ICAgICB0ZXhtYXBHTC5kcmF3VGV4dHVyZShkYXRhLnRleHR1cmVbMF0sIG1fZmxhZ3MsIEludFNp
emUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IG9wYWNpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpJNDIwOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0NDQ6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQxQjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpZNDJCOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWMTI6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6QTQyMDoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpOVjEyOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMjE6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVVZMjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpVWVZZOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVZZVToKKyAgICAgICAgLy8gVE9ETzogWVVWIHN1cHBvcnQs
IHBvc3NpYmxlIHdoZW4gZGlmZmVyZW50IGNvbG9yc3BhY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1
ZkxheWVyOjpFR0xJbWFnZURhdGE+IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEoRE1BQnVmT2JqZWN0JiBvYmplY3Qp
Cit7CisgICAgdXNpbmcgRUdMSW1hZ2VEYXRhID0gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdlRGF0YTsKKworICAgIEVHTERpc3BsYXkg
ZWdsRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuZWdsRGlzcGxheSgpOworCisgICAgRUdMSW1hZ2VLSFIgaW1hZ2VbRE1BQnVmRm9ybWF0Ojpj
X21heFBsYW5lc107CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9iamVjdC5mb3JtYXQu
bnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgYXR0ckluZGV4ID0gMDsKKyAgICAg
ICAgRUdMaW50IGF0dHJpYnV0ZXNbNjRdOworCisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4
KytdID0gRUdMX1dJRFRIOworICAgICAgICBhdHRyaWJ1dGVzW2F0dHJJbmRleCsrXSA9IG9iamVj
dC5mb3JtYXQucGxhbmVXaWR0aChpLCBvYmplY3Qud2lkdGgpOworICAgICAgICBhdHRyaWJ1dGVz
W2F0dHJJbmRleCsrXSA9IEVHTF9IRUlHSFQ7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4
KytdID0gb2JqZWN0LmZvcm1hdC5wbGFuZUhlaWdodChpLCBvYmplY3QuaGVpZ2h0KTsKKyAgICAg
ICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQ7Cisg
ICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0gRUdMaW50KG9iamVjdC5mb3JtYXQucGxh
bmVzW2ldLmZvdXJjYyk7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0gRUdMX0RN
QV9CVUZfUExBTkUwX0ZEX0VYVDsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBv
YmplY3QuZmRbaV07CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0gRUdMX0RNQV9C
VUZfUExBTkUwX09GRlNFVF9FWFQ7CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0g
b2JqZWN0Lm9mZnNldFtpXTsKKyAgICAgICAgYXR0cmlidXRlc1thdHRySW5kZXgrK10gPSBFR0xf
RE1BX0JVRl9QTEFORTBfUElUQ0hfRVhUOworICAgICAgICBhdHRyaWJ1dGVzW2F0dHJJbmRleCsr
XSA9IG9iamVjdC5zdHJpZGVbaV07CisgICAgICAgIGF0dHJpYnV0ZXNbYXR0ckluZGV4KytdID0g
RUdMX05PTkU7CisKKyAgICAgICAgaW1hZ2VbaV0gPSBjcmVhdGVJbWFnZUtIUigpKGVnbERpc3Bs
YXksIEVHTF9OT19DT05URVhULCBFR0xfTElOVVhfRE1BX0JVRl9FWFQsIG51bGxwdHIsIGF0dHJp
YnV0ZXMpOworICAgIH0KKworICAgIGF1dG8gaW1hZ2VEYXRhID0gbWFrZVVuaXF1ZTxFR0xJbWFn
ZURhdGE+KCk7CisgICAgYXV0byYgZGF0YSA9ICppbWFnZURhdGE7CisgICAgZGF0YS53aWR0aCA9
IG9iamVjdC53aWR0aDsKKyAgICBkYXRhLmhlaWdodCA9IG9iamVjdC5oZWlnaHQ7CisgICAgZGF0
YS5udW1JbWFnZXMgPSBvYmplY3QuZm9ybWF0Lm51bVBsYW5lczsKKyAgICBnbEdlblRleHR1cmVz
KGRhdGEubnVtSW1hZ2VzLCBkYXRhLnRleHR1cmUuZGF0YSgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5udW1JbWFnZXM7ICsraSkgeworICAgICAgICBkYXRhLmltYWdlW2ld
ID0gaW1hZ2VbaV07CisKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBkYXRh
LnRleHR1cmVbaV0pOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbEVHTEltYWdlVGFy
Z2V0VGV4dHVyZTJET0VTKEdMX1RFWFRVUkVfMkQsIGRhdGEuaW1hZ2VbaV0pOworICAgICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIHJldHVybiBpbWFn
ZURhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzBiZGFjYTZkMmRiZTEwOTUxZWNl
ODNkZTc2NWMwYTczMmE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1
Zi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgor
I2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
I2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgZmluYWwg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1ZigpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWYoKTsKKworICAgIGJvb2wgaXNETUFCdWZCYXNlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWN0aXZhdGVPbkNvbXBv
c2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqLCBUZXh0dXJlTWFwcGVyTGF5ZXIqKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHN3YXBCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIGNsYXNzIERNQUJ1
ZkxheWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERNQUJ1ZkxheWVyPiwgcHVibGlj
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBETUFCdWZMYXllcihETUFCdWZPYmplY3QmJiwg
VGV4dHVyZU1hcHBlckdMOjpGbGFncyA9IDApOworICAgICAgICB2aXJ0dWFsIH5ETUFCdWZMYXll
cigpOworCisgICAgICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXggPSB7IH0sIGZsb2F0IG9wYWNpdHkgPSAxLjApIGZpbmFsOworCisgICAgICAgIHZvaWQg
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LnJlbGVhc2VGbGFnLnJl
bGVhc2UoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY7CisKKyAgICAgICAgc3RydWN0
IEVHTEltYWdlRGF0YTsKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURh
dGE+IGNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmKTsKKworICAgICAgICBETUFCdWZP
YmplY3QgbV9vYmplY3Q7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IG1f
aW1hZ2VEYXRhOworICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjX21heGltdW1BZ2UgeyAxNiB9OworICAg
ICAgICB1bnNpZ25lZCBtX2FnZSB7IDAgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRj4KKyAgICB2b2lkIHB1c2hETUFCdWYoRE1BQnVmT2JqZWN0JiYgZG1hYnVmT2JqZWN0LCBj
b25zdCBGJiBjb25zdHJ1Y3RvciwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IDApCisg
ICAgeworICAgICAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fbGF5ZXJzLmVuc3VyZShkbWFidWZPYmplY3QuaGFuZGxlLAorICAgICAgICAgICAg
WyZdIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBETUFCdWZMYXllcihj
b25zdHJ1Y3RvcihXVEZNb3ZlKGRtYWJ1Zk9iamVjdCkpLCBmbGFncykpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIHB1c2hETUFCdWYocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHB1c2hETUFCdWYoUmVmPERNQUJ1ZkxheWVy
PiYmKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2NvbXBvc2l0b3JU
aHJlYWQ7CisjZW5kaWYKKworICAgIHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1aW50cHRyX3Qs
IFJlZjxETUFCdWZMYXllcj4sIFdURjo6RGVmYXVsdEhhc2g8dWludHB0cl90PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50cHRyX3Q+PjsKKyAgICBMYXllck1hcCBtX2xh
eWVyczsKKworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9wZW5kaW5nTGF5ZXI7CisgICAgUmVm
UHRyPERNQUJ1ZkxheWVyPiBtX2NvbW1pdHRlZExheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1RFWFRVUkVNQVBQRVJfUExBVEZPUk1M
QVlFUlBST1hZKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGlzRE1BQnVm
QmFzZWQoKSk7CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453729</attachid>
            <date>2022-03-03 06:46:59 -0800</date>
            <delta_ts>2022-03-04 07:09:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237328-20220303154657.patch</filename>
            <type>text/plain</type>
            <size>40528</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc2NGVlYjFiMjMyYjdk
ODdjZDE2MTg3MmVkYmRkMzJjYzA3NTA2Zi4uMjQzZWVlZTRkNjFhNzcyNzdmMTU5MjJkNGU0MzQ1
OWMxMjAwMDU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIyLTAzLTAzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFk
ZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzczMjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwgYSBUZXh0dXJlTWFwcGVyIHByb3h5CisgICAgICAgIGlt
cGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwbGF0Zm9ybSBsYXllcnMgYmFja2VkIGJ5IGRtYWJ1
ZiBvYmplY3RzLgorICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZGlzcGxheSBv
ZiBkbWFidWYgcHJvZHVjZXJzIGxpa2UgR1N0cmVhbWVyCisgICAgICAgIHBpcGVsaW5lcyBvciBB
TkdMRS1iYWNrZWQgV2ViR0wgY29udGV4dHMuIFRoZSBETUFCdWZMYXllciBjbGFzcyBpcyB0aGUK
KyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgb2JqZWN0LCBoYW5kbGluZyBkaXNwbGF5IG9mIHRoZSBh
Y3R1YWwgZG1hYnVmLiBUaGUgcHJveHkKKyAgICAgICAgaXRzZWxmIGlzIHRhc2tlZCB3aXRoIGNy
ZWF0aW5nIGFuZCBjYWNoaW5nIHN1Y2ggbGF5ZXJzIGZvciBhbnkgZG1hYnVmCisgICAgICAgIG9i
amVjdCB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgcHJvZHVjZXIuCisKKyAgICAgICAgRm9yIGVh
Y2ggZG1hYnVmIG9iamVjdCBwdXNoZWQgaW50byB0aGUgcHJveHksIHRoZSBhY2NvcmRpbmcgRE1B
QnVmTGF5ZXIKKyAgICAgICAgb2JqZWN0IGlzIHNwYXduZWQgYW5kIGNhY2hlZCBmb3IgZnV0dXJl
IHJldXNlLCBleHBlY3RpbmcgdGhlIHByb2R1Y2VyCisgICAgICAgIHRvIGJlIGFibGUgdG8gcHJv
dmlkZSBkbWFidWZzIGZyb20gYSBwb29sIG9yIHN3YXBjaGFpbiBvZiB0aGVzZSBvYmplY3RzLgor
ICAgICAgICBUaGUgY2FjaGUgaXMgZW1wdGllZCB3aGVuZXZlciBkbWFidWZzIGdvIHVudXNlZCBm
b3IgYSBjZXJ0YWluIGFtb3VudCBvZgorICAgICAgICBzd2Fwcywgb3IgaWYgdGhlIHNpemUgb2Yg
dGhlIHByb3ZpZGVkIGRtYWJ1ZnMgY2hhbmdlcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIGNl
cnRhaW4gZG1hYnVmLW9yaWVudGVkIGZhY2lsaXRpZXMgYXJlIGFkZGVkLgorCisgICAgICAgIERN
QUJ1ZkZvcm1hdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgZGlmZmVyZW50IERSTSBmb3JtYXRz
LCBmb3IKKyAgICAgICAgaW5zdGFuY2UgaG93IGRpZmZlcmVudCBwbGFuZXMgZm9yIHNwZWNpZmlj
IGZvcm1hdHMgYXJlIGZvcm1hdHRlZCBhbmQKKyAgICAgICAgc2l6ZWQuCisKKyAgICAgICAgRE1B
QnVmT2JqZWN0IGlzIGEgY2xhc3MgdGhhdCBoYW5kbGVzIGEgZ2l2ZW4gZ3JvdXBpbmcgb2YgZG1h
YnVmcworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQuIEl0IGhhcyBh
biBhc3NvY2lhdGVkIGhhbmRsZSB2YWx1ZSwKKyAgICAgICAgc2l6ZSwgYW5kIHBlci1wbGFuZSBk
bWFidWYgZmlsZSBkZXNjcmlwdG9ycywgb2Zmc2V0cywgc3RyaWRlcyBhbmQKKyAgICAgICAgbW9k
aWZpZXJzLCBhbG9uZyB3aXRoIGEgRE1BQnVmUmVsZWFzZUZsYWcgaW5zdGFuY2UuCisKKyAgICAg
ICAgRE1BQnVmUmVsZWFzZUZsYWcgb2JqZWN0cyBhcmUgdXNlZCBhcyBhbiBldmVudGZkLWJhc2Vk
IHJlbGVhc2UgbWVjaGFuaXNtCisgICAgICAgIHRoYXQgaW5kaWNhdGVzIHRvIHRoZSBwcm9kdWNl
ciB0aGF0IHRoZSBnaXZlbiBETUFCdWZPYmplY3QgaGFzIGJlZW4KKyAgICAgICAgcHJlc2VudGVk
IGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzZWQgYW5kIGlzIHRodXMgYXZhaWxhYmxlIGZvciByZXVz
ZS4KKworICAgICAgICBUaGlzIGlzIGEgcHJvdmlzaW9uYWwgaW50cm9kdWN0aW9uIG9mIHRoZXNl
IGZhY2lsaXRpZXMgaW50byB0aGUgdHJlZSwKKyAgICAgICAgd2l0aCBjZXJ0YWluIGJlaGF2aW9y
IChlLmcuIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBZVVYgZm9ybWF0cyBpbiB0aGUKKyAgICAgICAg
RE1BQnVmTGF5ZXIgY2xhc3MpIHN0aWxsIHBlbmRpbmcuIEludGVncmF0aW9uIHdpdGggcHJvZHVj
ZXJzIChsaWtlIHRoZQorICAgICAgICBETUFCdWZWaWRlb1NpbmsgaW4gdGhlIEdTdHJlYW1lciBw
aXBlbGluZSkgZm9sbG93cy4KKworICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQyk6Cisg
ICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6OnBsYW5lV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0OjpwbGFuZUhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpETUFCdWZGb3JtYXQ6OlBsYW5lOjpQbGFuZSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkEpOgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmRm9ybWF0SW1wbDo6ZGVmaW5lUGxhbmUpOgorICAgICAgICAoV2ViQ29yZTo6RE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6RE1BQnVmT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6fkRNQUJ1Zk9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZPYmplY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFnLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmUmVsZWFzZUZsYWc6OkRNQUJ1ZlJlbGVhc2VGbGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjp+RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpE
TUFCdWZSZWxlYXNlRmxhZzo6ZHVwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJl
bGVhc2VGbGFnOjpyZWxlYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxl
YXNlRmxhZzo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUltYWdlS0hSKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lJbWFn
ZUtIUik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpzd2Fw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWY6OnB1c2hETUFCdWYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkRNQUJ1ZkxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1
ZkxheWVyOjp+RE1BQnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmg6
IEFkZGVkLgorCiAyMDIyLTAzLTAyICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxl
LmNvbT4KIAogICAgICAgICBJVE06IENoZWNrYm94IHN0YXRlIGNoYW5nZSBpcyBub3QgdXBkYXRl
ZCBpbiBpc29sYXRlZCB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZQppbmRleCA0ZTBhZWJlMTk3NDc3ODhkNjQwZGM5OTVhNjZjNDNiYmEyYzkxODE2Li43
M2Y2OWM1MDk0NzBlZjhhZTk3OWNjZDk3ZDYxYTBmNzg4YTU0N2Y1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTM0LDYgKzM0LDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5UHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU29saWRDb2xvckxheWVyLmgKQEAgLTYwLDYgKzYxLDcgQEAgaWYgKFVTRV9DT09S
RElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJEbWFidWYuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1Zi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9y
bWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGNkNzI1YTk3MDE1M2M0ZmY3OGE3YmI0OGUwN2I4YzBlN2Y3YzQzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9E
TUFCdWZGb3JtYXQuaApAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNs
dWRlIDxjc3RkaW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBETUFCdWZG
b3JtYXRJbXBsIHsKKworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjcmVhdGVGb3VyQ0MoY2hh
ciBhLCBjaGFyIGIsIGNoYXIgYywgY2hhciBkKQoreworICAgIHJldHVybiB1aW50MzJfdChhKSB8
ICh1aW50MzJfdChiKSA8PCA4KSB8ICh1aW50MzJfdChjKSA8PCAxNikgfCAodWludDMyX3QoZCkg
PDwgMjQpOworfQorCit9CisKK3N0cnVjdCBETUFCdWZGb3JtYXQgeworICAgIGVudW0gY2xhc3Mg
Rm91ckNDIDogdWludDMyX3QgeworICAgICAgICBJbnZhbGlkID0gMCwKKworICAgICAgICBSOCA9
IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICc4JywgJyAnLCAnICcpLAorICAg
ICAgICBHUjg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdHJywgJ1InLCAnOCcs
ICc4JyksCisKKyAgICAgICAgWFJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3Vy
Q0MoJ1gnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgWEJHUjg4ODggPSBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVGb3VyQ0MoJ1gnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCWDg4ODgg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnWCcsICcyJywgJzQnKSwKKyAg
ICAgICAgQkdSWDg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAnWCcs
ICcyJywgJzQnKSwKKyAgICAgICAgQVJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVG
b3VyQ0MoJ0EnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgQUJHUjg4ODggPSBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCQTg4
ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnQScsICcyJywgJzQnKSwK
KyAgICAgICAgQkdSQTg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAn
QScsICcyJywgJzQnKSwKKyAgICAgICAgUkdCODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRl
Rm91ckNDKCdSJywgJ0cnLCAnMicsICc0JyksCisgICAgICAgIEJHUjg4OCA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdHJywgJzInLCAnNCcpLAorCisgICAgICAgIEk0MjAg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0knLCAnNCcsICcyJywgJzAnKSwKKyAg
ICAgICAgWVYxMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJzEn
LCAnMicpLAorICAgICAgICBBNDIwID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdB
JywgJzQnLCAnMicsICcwJyksCisgICAgICAgIE5WMTIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ04nLCAnVicsICcxJywgJzInKSwKKyAgICAgICAgTlYyMSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzInLCAnMScpLAorCisgICAgICAgIFlVWTIg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1knLCAnVScsICdZJywgJzInKSwKKyAg
ICAgICAgWVZZVSA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJ1kn
LCAnVScpLAorICAgICAgICBVWVZZID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdV
JywgJ1knLCAnVicsICdZJyksCisgICAgICAgIFZZVVkgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1YnLCAnWScsICdVJywgJ1knKSwKKyAgICAgICAgVlVZQSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdVJywgJ1knLCAnQScpLAorICAgICAgICBBWVVWID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ1knLCAnVScsICdWJyksCisKKyAg
ICAgICAgWTQ0NCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzQn
LCAnNCcpLAorICAgICAgICBZNDFCID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJzQnLCAnMScsICdCJyksCisgICAgICAgIFk0MkIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnNCcsICcyJywgJ0InKSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBjX21heFBsYW5lcyA9IDQ7CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0M+IHN0
YXRpYyBETUFCdWZGb3JtYXQgY3JlYXRlKCkgPSBkZWxldGU7CisgICAgc3RhdGljIERNQUJ1ZkZv
cm1hdCBjcmVhdGUodWludDMyX3QpOworCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJjY1ZhbHVl
LCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KKyAgICBzdGF0aWMgRE1BQnVmRm9y
bWF0IGluc3RhbnRpYXRlKCk7CisKKyAgICBGb3VyQ0MgZm91cmNjIHsgRm91ckNDOjpJbnZhbGlk
IH07CisgICAgdW5zaWduZWQgbnVtUGxhbmVzIHsgMCB9OworCisgICAgdWludDMyX3QgcGxhbmVX
aWR0aCh1bnNpZ25lZCBwbGFuZUluZGV4LCB1aW50MzJfdCB3aWR0aCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwgY19tYXhQbGFuZXMpOworICAgICAgICByZXR1cm4g
KHdpZHRoID4+IHBsYW5lc1twbGFuZUluZGV4XS5ob3Jpem9udGFsU3Vic2FtcGxpbmcpOworICAg
IH0KKworICAgIHVpbnQzMl90IHBsYW5lSGVpZ2h0KHVuc2lnbmVkIHBsYW5lSW5kZXgsIHVpbnQz
Ml90IGhlaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwgY19t
YXhQbGFuZXMpOworICAgICAgICByZXR1cm4gKGhlaWdodCA+PiBwbGFuZXNbcGxhbmVJbmRleF0u
dmVydGljYWxTdWJzYW1wbGluZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJj
Y1ZhbHVlLCB1bnNpZ25lZCBoc1ZhbHVlLCB1bnNpZ25lZCB2c1ZhbHVlPgorICAgIHN0cnVjdCBQ
bGFuZURlZmluaXRpb24geworICAgICAgICBzdGF0aWMgY29uc3RleHByIEZvdXJDQyBmb3VyY2Mg
PSBmb3VyY2NWYWx1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBob3Jpem9u
dGFsU3Vic2FtcGxpbmcgPSBoc1ZhbHVlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHZlcnRpY2FsU3Vic2FtcGxpbmcgPSB2c1ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
UGxhbmUgeworICAgICAgICBQbGFuZSgpID0gZGVmYXVsdDsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQbGFuZURlZml0aW9uVHlwZT4KKyAgICAgICAgUGxhbmUoY29uc3QgUGxhbmVEZWZp
dGlvblR5cGUmKQorICAgICAgICAgICAgOiBmb3VyY2MoUGxhbmVEZWZpdGlvblR5cGU6OmZvdXJj
YykKKyAgICAgICAgICAgICwgaG9yaXpvbnRhbFN1YnNhbXBsaW5nKFBsYW5lRGVmaXRpb25UeXBl
Ojpob3Jpem9udGFsU3Vic2FtcGxpbmcpCisgICAgICAgICAgICAsIHZlcnRpY2FsU3Vic2FtcGxp
bmcoUGxhbmVEZWZpdGlvblR5cGU6OnZlcnRpY2FsU3Vic2FtcGxpbmcpCisgICAgICAgIHsgfQor
CisgICAgICAgIEZvdXJDQyBmb3VyY2MgeyBGb3VyQ0M6OkludmFsaWQgfTsKKyAgICAgICAgdW5z
aWduZWQgaG9yaXpvbnRhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgICAgICB1bnNpZ25lZCB2ZXJ0
aWNhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgIH07CisgICAgc3RkOjphcnJheTxQbGFuZSwgY19t
YXhQbGFuZXM+IHBsYW5lczsKK307CisKK25hbWVzcGFjZSBETUFCdWZGb3JtYXRJbXBsIHsKKwor
dGVtcGxhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0MgZm91cmNjVmFsdWU+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IGNyZWF0ZVNpbmdsZVBsYW5lUkdCQSgpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1h
dDo6aW5zdGFudGlhdGU8Zm91cmNjVmFsdWUsCisgICAgICAgIERNQUJ1ZkZvcm1hdDo6UGxhbmVE
ZWZpbml0aW9uPGZvdXJjY1ZhbHVlLCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IElu
ZGV4LCBzaXplX3QgU2l6ZSwgdHlwZW5hbWUgUGxhbmVEZWZpbml0aW9uVHlwZSwgdHlwZW5hbWUu
Li4gUGxhbmVEZWZpbml0aW9uVHlwZXM+Cit2b2lkIGRlZmluZVBsYW5lKHN0ZDo6YXJyYXk8RE1B
QnVmRm9ybWF0OjpQbGFuZSwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4mIHBsYW5lcykKK3sK
KyAgICBuZXcgKCZwbGFuZXNbSW5kZXhdKSBETUFCdWZGb3JtYXQ6OlBsYW5lKFBsYW5lRGVmaW5p
dGlvblR5cGUgeyB9KTsKKyAgICBpZiBjb25zdGV4cHIgKChJbmRleCArIDEpIDwgU2l6ZSkKKyAg
ICAgICAgZGVmaW5lUGxhbmU8SW5kZXggKyAxLCBTaXplLCBQbGFuZURlZmluaXRpb25UeXBlcy4u
Lj4ocGxhbmVzKTsKK30KKworfQorCit0ZW1wbGF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3Vy
Y2NWYWx1ZSwgdHlwZW5hbWUuLi4gUGxhbmVEZWZpbml0aW9uVHlwZXM+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGUoKQoreworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mLi4uKFBsYW5lRGVmaW5pdGlvblR5cGVzKSA8PSA0KTsKKworICAgIERNQUJ1ZkZvcm1h
dCBmb3JtYXQ7CisgICAgZm9ybWF0LmZvdXJjYyA9IGZvdXJjY1ZhbHVlOworICAgIGZvcm1hdC5u
dW1QbGFuZXMgPSBzaXplb2YuLi4oUGxhbmVEZWZpbml0aW9uVHlwZXMpOworICAgIERNQUJ1ZkZv
cm1hdEltcGw6OmRlZmluZVBsYW5lPDAsIHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBlcyks
IFBsYW5lRGVmaW5pdGlvblR5cGVzLi4uPihmb3JtYXQucGxhbmVzKTsKKyAgICByZXR1cm4gZm9y
bWF0OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4OD4oKQoreworICAgIHJldHVybiBE
TUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpYUkdCODg4OD4o
KTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNy
ZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1B
QnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6WEJHUjg4ODg+KCk7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVh
dGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQlg4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1
ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlJHQlg4ODg4PigpOwor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRl
PERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JYODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZG
b3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpCR1JYODg4OD4oKTsKK30K
KwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9y
bWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QVJHQjg4ODg+KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OkFCR1I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OkFCR1I4ODg4PigpOworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpSR0JBODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpSR0JBODg4OD4oKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1w
bDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QkdSQTg4ODg+KCk7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9y
bWF0OjpGb3VyQ0M6Okk0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50
aWF0ZTxGb3VyQ0M6Okk0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAw
LCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpG
b3VyQ0M6OllWMTI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxG
b3VyQ0M6OllWMTIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQbGFu
ZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OkE0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6
OkE0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAg
ICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQbGFuZURlZmlu
aXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6
OlI4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFC
dWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYxMj4oKQoreworICAgIHJl
dHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYxMiwKKyAgICAgICAgUGxh
bmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248
Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZv
cm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMT4oKQor
eworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYyMSwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVVZMj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
WVVZMiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwgMD4+KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0
OjppbnN0YW50aWF0ZTxGb3VyQ0M6OllWWVUsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0
IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpVWVZZPigpCit7Cisg
ICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpVWVZZLAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8
PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6VllVWT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRl
PEZvdXJDQzo6WVZZVSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwg
MD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0
OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE+KCkKK3sKKyAgICByZXR1cm4gRE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlZVWUEsCisgICAgICAgIFBsYW5lRGVmaW5p
dGlvbjxGb3VyQ0M6OkFCR1I4ODg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
QVlVVj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
VlVZQSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6QUJHUjg4ODgsIDAsIDA+Pigp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDQ0PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZNDQ0LAorICAgICAgICBQbGFuZURlZmluaXRpb248
Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAw
LCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+PigpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDFCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6
aW5zdGFudGlhdGU8Rm91ckNDOjpZNDFCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckND
OjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAyLCAwPiwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDIsIDA+PigpOworfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpZNDJCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFu
dGlhdGU8Rm91ckNDOjpZNDJCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwg
MCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAwPiwKKyAgICAg
ICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDA+PigpOworfQorCitpbmxpbmUgRE1B
QnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlKHVpbnQzMl90IGZvdXJjY1ZhbHVlKQorewor
ICAgIHN3aXRjaCAoZm91cmNjVmFsdWUpIHsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WFJH
Qjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WFJHQjg4ODg+KCk7CisgICAg
Y2FzZSB1aW50MzJfdChGb3VyQ0M6OlhCR1I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxG
b3VyQ0M6OlhCR1I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpSR0JYODg4OCk6
CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpSR0JYODg4OD4oKTsKKyAgICBjYXNlIHVp
bnQzMl90KEZvdXJDQzo6QkdSWDg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
QkdSWDg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFSR0I4ODg4KToKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFSR0I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpBQkdSODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBQkdSODg4
OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6UkdCQTg4ODgpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6UkdCQTg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6
OkJHUkE4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkJHUkE4ODg4PigpOwor
ICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpJNDIwKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxG
b3VyQ0M6Okk0MjA+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllWMTIpOgorICAgICAg
ICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WVYxMj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJD
Qzo6QTQyMCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBNDIwPigpOworICAgIGNh
c2UgdWludDMyX3QoRm91ckNDOjpOVjEyKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6
Ok5WMTI+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Ok5WMjEpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6TlYyMT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WVVZ
Mik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZVVkyPigpOworICAgIGNhc2UgdWlu
dDMyX3QoRm91ckNDOjpZVllVKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllWWVU+
KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlVZVlkpOgorICAgICAgICByZXR1cm4gY3Jl
YXRlPEZvdXJDQzo6VVlWWT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VllVWSk6Cisg
ICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpVWVZZPigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpWVVlBKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlZVWUE+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFZVVYpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZv
dXJDQzo6QVlVVj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQ0NCk6CisgICAgICAg
IHJldHVybiBjcmVhdGU8Rm91ckNDOjpZNDQ0PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckND
OjpZNDFCKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Olk0MUI+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6Olk0MkIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
WTQyQj4oKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg2
NDQ0NDQzOTRmN2I5ZDlmZjQzZGNiZGMzOTJhYmFhNzdjYzVhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaApAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFCdWZS
ZWxlYXNlRmxhZy5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5j
bHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgRE1BQnVmT2JqZWN0IHsKKyAgICBETUFCdWZPYmplY3QodWludHB0cl90IGhh
bmRsZSkKKyAgICAgICAgOiBoYW5kbGUoaGFuZGxlKQorICAgIHsgfQorCisgICAgfkRNQUJ1Zk9i
amVjdCgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0Lm51
bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICBpZiAoZmRbaV0gIT0gLTEpCisgICAgICAgICAg
ICAgICAgY2xvc2UoZmRbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2JqZWN0
KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworICAgIERNQUJ1Zk9iamVjdCYgb3BlcmF0
b3I9KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworCisgICAgRE1BQnVmT2JqZWN0KERN
QUJ1Zk9iamVjdCYmIG8pCisgICAgICAgIDogaGFuZGxlKG8uaGFuZGxlKQorICAgICAgICAsIGZv
cm1hdChvLmZvcm1hdCkKKyAgICAgICAgLCB3aWR0aChvLndpZHRoKQorICAgICAgICAsIGhlaWdo
dChvLmhlaWdodCkKKyAgICAgICAgLCByZWxlYXNlRmxhZyhXVEZNb3ZlKG8ucmVsZWFzZUZsYWcp
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1hdC5udW1QbGFu
ZXM7ICsraSkgeworICAgICAgICAgICAgZmRbaV0gPSBvLmZkW2ldOworICAgICAgICAgICAgby5m
ZFtpXSA9IC0xOworCisgICAgICAgICAgICBvZmZzZXRbaV0gPSBvLm9mZnNldFtpXTsKKyAgICAg
ICAgICAgIHN0cmlkZVtpXSA9IG8uc3RyaWRlW2ldOworICAgICAgICAgICAgbW9kaWZpZXJbaV0g
PSBvLm1vZGlmaWVyW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2JqZWN0JiBv
cGVyYXRvcj0oRE1BQnVmT2JqZWN0JiYgbykKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZv
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIHRoaXMtPn5ETUFCdWZPYmpl
Y3QoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBETUFCdWZPYmplY3QoV1RGTW92ZShvKSk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB1aW50cHRyX3QgaGFuZGxlIHsgMCB9Owor
ICAgIERNQUJ1ZkZvcm1hdCBmb3JtYXQgeyB9OworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9Owor
ICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICBETUFCdWZSZWxlYXNlRmxhZyByZWxlYXNl
RmxhZyB7IH07CisgICAgc3RkOjphcnJheTxpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+
IGZkIHsgLTEsIC0xLCAtMSwgLTEgfTsKKyAgICBzdGQ6OmFycmF5PHNpemVfdCwgRE1BQnVmRm9y
bWF0OjpjX21heFBsYW5lcz4gb2Zmc2V0IHsgMCwgMCwgMCwgMCB9OworICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHN0cmlkZSB7IDAsIDAsIDAsIDAg
fTsKKyAgICBzdGQ6OmFycmF5PHVpbnQ2NF90LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBt
b2RpZmllciB7IDAsIDAsIDAsIDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZSZWxl
YXNlRmxhZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJl
bGVhc2VGbGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y0ZDc3NjAwNTNmOTljNTU4NzY1MGEwODZhYWI5NzEw
NDg3NWY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dibS9ETUFCdWZSZWxlYXNlRmxhZy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxz
eXMvZXZlbnRmZC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgRE1BQnVmUmVsZWFzZUZsYWcgeworICAgIERNQUJ1ZlJlbGVh
c2VGbGFnKCkgPSBkZWZhdWx0OworCisgICAgZW51bSBJbml0aWFsaXplVGFnIHsgSW5pdGlhbGl6
ZSB9OworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKEluaXRpYWxpemVUYWcpCisgICAgeworICAgICAg
ICBmZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMgfCBFRkRfTk9OQkxPQ0spOworICAgIH0KKwor
ICAgIH5ETUFCdWZSZWxlYXNlRmxhZygpCisgICAgeworICAgICAgICBpZiAoZmQgIT0gLTEpCisg
ICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7CisgICAgfQorCisgICAgRE1B
QnVmUmVsZWFzZUZsYWcoY29uc3QgRE1BQnVmUmVsZWFzZUZsYWcmKSA9IGRlbGV0ZTsKKyAgICBE
TUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KGNvbnN0IERNQUJ1ZlJlbGVhc2VGbGFnJikgPSBk
ZWxldGU7CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhETUFCdWZSZWxlYXNlRmxhZyYmIG8pCisg
ICAgeworICAgICAgICBmZCA9IG8uZmQ7CisgICAgICAgIG8uZmQgPSAtMTsKKyAgICB9CisKKyAg
ICBETUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KERNQUJ1ZlJlbGVhc2VGbGFnJiYgbykKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgICAgIHRoaXMtPn5ETUFCdWZSZWxlYXNlRmxhZygpOworICAgICAgICBuZXcgKHRoaXMp
IERNQUJ1ZlJlbGVhc2VGbGFnKFdURk1vdmUobykpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgRE1BQnVmUmVsZWFzZUZsYWcgZHVwKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgRE1BQnVm
UmVsZWFzZUZsYWcgZmxhZzsKKyAgICAgICAgZmxhZy5mZCA9IGR1cENsb3NlT25FeGVjKGZkKTsK
KyAgICAgICAgcmV0dXJuIGZsYWc7CisgICAgfQorCisgICAgYm9vbCByZWxlYXNlZCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDAgfTsKKyAgICAgICAgaWYgKHJlYWQoZmQsICZ2
YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAgICAg
IHJldHVybiAhIXZhbHVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9p
ZCByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDEgfTsKKyAgICAgICAgd3JpdGUoZmQs
ICZ2YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgfQorCisgICAgaW50IGZkIHsgLTEgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTUwNzE2
MWIxYTkwYjNjOGY3MjJiNzJlYzJiMjdlMTZkNmE2MGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlETUFCdWYuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaCIKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxmY250bC5oPgorI2lu
Y2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2Vn
bC5oPgorI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0MgY3JlYXRlSW1hZ2VLSFIoKQor
eworICAgIHN0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0Mgc19jcmVhdGVJbWFnZUtIUjsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNf
ZmxhZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfY3JlYXRlSW1hZ2VLSFIgPSByZWlu
dGVycHJldF9jYXN0PFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImVnbENyZWF0ZUltYWdlS0hSIikpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gc19jcmVhdGVJ
bWFnZUtIUjsKK30KKworc3RhdGljIFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0MgZGVzdHJveUlt
YWdlS0hSKCkKK3sKKyAgICBzdGF0aWMgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQyBzX2Rlc3Ry
b3lJbWFnZUtIUjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFnOworICAgIHN0ZDo6
Y2FsbF9vbmNlKHNfZmxhZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfZGVzdHJveUlt
YWdlS0hSID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DPihlZ2xH
ZXRQcm9jQWRkcmVzcygiZWdsRGVzdHJveUltYWdlS0hSIikpOworICAgICAgICB9KTsKKyAgICBy
ZXR1cm4gc19kZXN0cm95SW1hZ2VLSFI7Cit9CisKK3N0cnVjdCBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhIHsKKyAgICBXVEZf
TUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICB+RUdMSW1hZ2VEYXRhKCkKKyAgICB7
CisgICAgICAgIGlmIChudW1JbWFnZXMpIHsKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
bnVtSW1hZ2VzLCB0ZXh0dXJlLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1JbWFnZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpbWFnZVtp
XSAhPSBFR0xfTk9fSU1BR0VfS0hSKQorICAgICAgICAgICAgICAgICAgICBkZXN0cm95SW1hZ2VL
SFIoKShQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLmVnbERp
c3BsYXkoKSwgaW1hZ2VbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgaGVpZ2h0IHsgMCB9OworICAg
IHVuc2lnbmVkIG51bUltYWdlcyB7IDAgfTsKKyAgICBzdGQ6OmFycmF5PEdMdWludCwgRE1BQnVm
Rm9ybWF0OjpjX21heFBsYW5lcz4gdGV4dHVyZSB7IDAsIDAsIDAsIDAgfTsKKyAgICBzdGQ6OmFy
cmF5PEVHTEltYWdlS0hSLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBpbWFnZSB7IEVHTF9O
T19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19J
TUFHRV9LSFIgfTsKK307CisKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6
OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRlZmF1bHQ7CitUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjp+VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1ZigpID0gZGVmYXVsdDsKKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmOjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRv
ciogY29tcG9zaXRvciwgVGV4dHVyZU1hcHBlckxheWVyKiB0YXJnZXRMYXllcikKK3sKKyNpZm5k
ZWYgTkRFQlVHCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUaHJlYWQpCisgICAgICAgIG1fY29tcG9z
aXRvclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKKyNlbmRpZgorICAgIEFTU0VSVChtX2Nv
bXBvc2l0b3JUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY29tcG9z
aXRvcik7CisgICAgQVNTRVJUKHRhcmdldExheWVyKTsKKworICAgIHsKKyAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwor
ICAgICAgICBtX3RhcmdldExheWVyID0gdGFyZ2V0TGF5ZXI7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmludmFsaWRhdGUoKQoreworICAg
IExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKworICAgIG1fcGVuZGluZ0xheWVyID0gbnVsbHB0
cjsKKyAgICBtX2NvbW1pdHRlZExheWVyID0gbnVsbHB0cjsKKyAgICBtX2xheWVycyA9IHsgfTsK
KworICAgIG1fY29tcG9zaXRvciA9IG51bGxwdHI7CisgICAgbV90YXJnZXRMYXllciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6c3dh
cEJ1ZmZlcigpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgIGlmICghbV90
YXJnZXRMYXllciB8fCAhbV9wZW5kaW5nTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gcHJldmlvdXNMYXllciA9IFdURk1vdmUobV9jb21taXR0ZWRMYXllcik7CisgICAgbV9jb21t
aXR0ZWRMYXllciA9IFdURk1vdmUobV9wZW5kaW5nTGF5ZXIpOworICAgIG1fdGFyZ2V0TGF5ZXIt
PnNldENvbnRlbnRzTGF5ZXIobV9jb21taXR0ZWRMYXllci5nZXQoKSk7CisKKyAgICAvLyBUaGUg
cHJldmlvdXMgYW5kIGp1c3QtY29tbWl0dGVkIGxheWVycyBzaG91bGRuJ3QgYmUgdGhlIHNhbWUu
IEJ1dCBpZiB0aGV5IGFyZSwgZG9uJ3QgcGVyZm9ybSBhIHJlbGVhc2UuCisgICAgQVNTRVJUKCFw
cmV2aW91c0xheWVyIHx8IHByZXZpb3VzTGF5ZXIgIT0gbV9jb21taXR0ZWRMYXllcik7CisgICAg
aWYgKHByZXZpb3VzTGF5ZXIgJiYgcHJldmlvdXNMYXllciAhPSBtX2NvbW1pdHRlZExheWVyKQor
ICAgICAgICBwcmV2aW91c0xheWVyLT5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1fY29tbWl0dGVk
TGF5ZXItPm1faW1hZ2VEYXRhKQorICAgICAgICBtX2NvbW1pdHRlZExheWVyLT5tX2ltYWdlRGF0
YSA9IERNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEobV9jb21taXR0ZWRMYXllci0+bV9v
YmplY3QpOworICAgIG1fY29tbWl0dGVkTGF5ZXItPm1fYWdlID0gMDsKKworICAgIC8vIFJlbW92
ZSBhbnkgc3RhbGUgbGF5ZXJzLCBlLmcuIGlmIGEgbGF5ZXIgaGFzIGdvbmUgdW51c2VkIGZvciA+
Y19tYXhpbXVtQWdlIHN3YXBzIG9yIGRvZXNuJ3QgbWF0Y2ggdGhlIGxhdGVzdCBzaXplLgorICAg
IGF1dG8mIGNvbW1pdHRlZE9iamVjdCA9IG1fY29tbWl0dGVkTGF5ZXItPm1fb2JqZWN0OworICAg
IGF1dG8gaXNTdGFsZUxheWVyID0KKyAgICAgICAgWyZdKGF1dG8mIGl0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiBsYXllciA9IGl0LnZhbHVlLmdldCgpOworICAgICAgICAgICAgcmV0
dXJuIGxheWVyLm1fYWdlID4gRE1BQnVmTGF5ZXI6OmNfbWF4aW11bUFnZQorICAgICAgICAgICAg
ICAgIHx8ICEobGF5ZXIubV9vYmplY3Qud2lkdGggPT0gY29tbWl0dGVkT2JqZWN0LndpZHRoICYm
IGxheWVyLm1fb2JqZWN0LmhlaWdodCA9PSBjb21taXR0ZWRPYmplY3QuaGVpZ2h0KTsKKyAgICAg
ICAgfTsKKworICAgIGJvb2wgaGFzU3RhbGVMYXllcnMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8g
aXQgPSBtX2xheWVycy5iZWdpbigpOyBpdCAhPSBtX2xheWVycy5lbmQoKTsgKytpdCkgeworICAg
ICAgICArK2l0LT52YWx1ZS0+bV9hZ2U7CisgICAgICAgIGhhc1N0YWxlTGF5ZXJzIHw9IGlzU3Rh
bGVMYXllcigqaXQpOworICAgIH0KKworICAgIGlmIChoYXNTdGFsZUxheWVycykKKyAgICAgICAg
bV9sYXllcnMucmVtb3ZlSWYoaXNTdGFsZUxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpwdXNoRE1BQnVmKFJlZjxETUFCdWZMYXllcj4mJiBk
bWFidWZMYXllcikKK3sKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgIC8vIFRo
ZSBwZW5kaW5nIGFuZCBqdXN0LXB1c2hlZCBsYXllcnMgc2hvdWxkbid0IGJlIHRoZSBzYW1lLiBC
dXQgaWYgdGhleSBhcmUsIGRvbid0IHBlcmZvcm0gYSByZWxlYXNlLgorICAgIEFTU0VSVCghbV9w
ZW5kaW5nTGF5ZXIgfHwgbV9wZW5kaW5nTGF5ZXIgIT0gZG1hYnVmTGF5ZXIucHRyKCkpOworICAg
IGlmIChtX3BlbmRpbmdMYXllciAmJiBtX3BlbmRpbmdMYXllciAhPSBkbWFidWZMYXllci5wdHIo
KSkKKyAgICAgICAgbV9wZW5kaW5nTGF5ZXItPnJlbGVhc2UoKTsKKworICAgIG1fcGVuZGluZ0xh
eWVyID0gV1RGTW92ZShkbWFidWZMYXllcik7CisgICAgaWYgKG1fY29tcG9zaXRvcikKKyAgICAg
ICAgbV9jb21wb3NpdG9yLT5vbk5ld0J1ZmZlckF2YWlsYWJsZSgpOworfQorCitUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RE1BQnVmTGF5ZXIoRE1B
QnVmT2JqZWN0JiYgb2JqZWN0LCBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKQorICAgIDog
bV9vYmplY3QoV1RGTW92ZShvYmplY3QpKQorICAgICwgbV9mbGFncyhmbGFncykKK3sgfQorCitU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6fkRNQUJ1
ZkxheWVyKCkgPSBkZWZhdWx0OworCit2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
JiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAg
aWYgKCFtX2ltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1hcHBlckdM
JiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIp
OworICAgIGF1dG8mIGRhdGEgPSAqbV9pbWFnZURhdGE7CisKKyAgICBzd2l0Y2ggKG1fb2JqZWN0
LmZvcm1hdC5mb3VyY2MpIHsKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4
ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdSODg4ODoKKyAgICBjYXNlIERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91
ckNDOjpBQkdSODg4ODoKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmUoZGF0YS50ZXh0dXJl
WzBdLCBtX2ZsYWdzLCBJbnRTaXplKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFyZ2V0UmVj
dCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6STQyMDoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpZNDQ0OgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MUI6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQyQjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpZVjEyOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkE0MjA6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYxMjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpOVjIxOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllVWTI6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6VVlWWToKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpWVVlBOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU6CisgICAgICAgIC8v
IFRPRE86IFlVViBzdXBwb3J0LCBwb3NzaWJsZSB3aGVuIGRpZmZlcmVudCBjb2xvcnNwYWNlcyBh
cmUgc3VwcG9ydGVkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6
OkVHTEltYWdlRGF0YT4gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1B
QnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmIG9iamVjdCkKK3sKKyAg
ICB1c2luZyBFR0xJbWFnZURhdGEgPSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhOworCisgICAgRUdMRGlzcGxheSBlZ2xEaXNw
bGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5lZ2xE
aXNwbGF5KCk7CisKKyAgICBFR0xJbWFnZUtIUiBpbWFnZVtETUFCdWZGb3JtYXQ6OmNfbWF4UGxh
bmVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFu
ZXM7ICsraSkgeworICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8RUdMaW50PiBhdHRyaWJ1
dGVzIHsKKyAgICAgICAgICAgIEVHTF9XSURUSCwgRUdMaW50KG9iamVjdC5mb3JtYXQucGxhbmVX
aWR0aChpLCBvYmplY3Qud2lkdGgpKSwKKyAgICAgICAgICAgIEVHTF9IRUlHSFQsIEVHTGludChv
YmplY3QuZm9ybWF0LnBsYW5lSGVpZ2h0KGksIG9iamVjdC5oZWlnaHQpKSwKKyAgICAgICAgICAg
IEVHTF9MSU5VWF9EUk1fRk9VUkNDX0VYVCwgRUdMaW50KG9iamVjdC5mb3JtYXQucGxhbmVzW2ld
LmZvdXJjYyksCisgICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfRkRfRVhULCBvYmplY3Qu
ZmRbaV0sCisgICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVCwgRUdMaW50
KG9iamVjdC5vZmZzZXRbaV0pLAorICAgICAgICAgICAgRUdMX0RNQV9CVUZfUExBTkUwX1BJVENI
X0VYVCwgRUdMaW50KG9iamVjdC5zdHJpZGVbaV0pLAorICAgICAgICAgICAgRUdMX05PTkUsCisg
ICAgICAgIH07CisgICAgICAgIGltYWdlW2ldID0gY3JlYXRlSW1hZ2VLSFIoKShlZ2xEaXNwbGF5
LCBFR0xfTk9fQ09OVEVYVCwgRUdMX0xJTlVYX0RNQV9CVUZfRVhULCBudWxscHRyLCBzdGQ6OmRh
dGEoYXR0cmlidXRlcykpOworICAgIH0KKworICAgIGF1dG8gaW1hZ2VEYXRhID0gbWFrZVVuaXF1
ZTxFR0xJbWFnZURhdGE+KCk7CisgICAgYXV0byYgZGF0YSA9ICppbWFnZURhdGE7CisgICAgZGF0
YS53aWR0aCA9IG9iamVjdC53aWR0aDsKKyAgICBkYXRhLmhlaWdodCA9IG9iamVjdC5oZWlnaHQ7
CisgICAgZGF0YS5udW1JbWFnZXMgPSBvYmplY3QuZm9ybWF0Lm51bVBsYW5lczsKKyAgICBnbEdl
blRleHR1cmVzKGRhdGEubnVtSW1hZ2VzLCBkYXRhLnRleHR1cmUuZGF0YSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5udW1JbWFnZXM7ICsraSkgeworICAgICAgICBkYXRh
LmltYWdlW2ldID0gaW1hZ2VbaV07CisKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBkYXRhLnRleHR1cmVbaV0pOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbEVH
TEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTKEdMX1RFWFRVUkVfMkQsIGRhdGEuaW1hZ2VbaV0pOwor
ICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIHJl
dHVybiBpbWFnZURhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzBiZGFjYTZkMmRi
ZTEwOTUxZWNlODNkZTc2NWMwYTczMmE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHku
aCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkRNQUJ1ZkZv
cm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJHTC5oIgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWYgZmluYWwgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1ZigpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlETUFCdWYoKTsKKworICAgIGJvb2wgaXNETUFCdWZCYXNlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWN0aXZh
dGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqLCBUZXh0dXJlTWFwcGVyTGF5ZXIqKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN3YXBCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIGNs
YXNzIERNQUJ1ZkxheWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERNQUJ1ZkxheWVy
PiwgcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKKyAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBETUFCdWZMYXllcihETUFCdWZP
YmplY3QmJiwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyA9IDApOworICAgICAgICB2aXJ0dWFsIH5E
TUFCdWZMYXllcigpOworCisgICAgICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXggPSB7IH0sIGZsb2F0IG9wYWNpdHkgPSAxLjApIGZpbmFsOworCisgICAg
ICAgIHZvaWQgcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LnJlbGVh
c2VGbGFnLnJlbGVhc2UoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY7CisKKyAgICAg
ICAgc3RydWN0IEVHTEltYWdlRGF0YTsKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxF
R0xJbWFnZURhdGE+IGNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmKTsKKworICAgICAg
ICBETUFCdWZPYmplY3QgbV9vYmplY3Q7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFn
ZURhdGE+IG1faW1hZ2VEYXRhOworICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxh
Z3M7CisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjX21heGltdW1BZ2UgeyAx
NiB9OworICAgICAgICB1bnNpZ25lZCBtX2FnZSB7IDAgfTsKKyAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRj4KKyAgICB2b2lkIHB1c2hETUFCdWYoRE1BQnVmT2JqZWN0JiYgZG1hYnVm
T2JqZWN0LCBjb25zdCBGJiBjb25zdHJ1Y3RvciwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cyA9IDApCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fbGF5ZXJzLmVuc3VyZShkbWFidWZPYmplY3QuaGFuZGxlLAorICAg
ICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBETUFC
dWZMYXllcihjb25zdHJ1Y3RvcihXVEZNb3ZlKGRtYWJ1Zk9iamVjdCkpLCBmbGFncykpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIHB1c2hETUFCdWYocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5j
b3B5UmVmKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHB1c2hETUFCdWYoUmVmPERN
QUJ1ZkxheWVyPiYmKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2Nv
bXBvc2l0b3JUaHJlYWQ7CisjZW5kaWYKKworICAgIHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1
aW50cHRyX3QsIFJlZjxETUFCdWZMYXllcj4sIFdURjo6RGVmYXVsdEhhc2g8dWludHB0cl90Piwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50cHRyX3Q+PjsKKyAgICBMYXll
ck1hcCBtX2xheWVyczsKKworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9wZW5kaW5nTGF5ZXI7
CisgICAgUmVmUHRyPERNQUJ1ZkxheWVyPiBtX2NvbW1pdHRlZExheWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1RFWFRVUkVNQVBQRVJf
UExBVEZPUk1MQVlFUlBST1hZKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYs
IGlzRE1BQnVmQmFzZWQoKSk7CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453839</attachid>
            <date>2022-03-04 07:09:09 -0800</date>
            <delta_ts>2022-03-10 03:02:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237328-20220304160908.patch</filename>
            <type>text/plain</type>
            <size>80341</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhiOTdjZGE4NWZlZWQ2
NWExNmE4NTQwMmRmM2YzYTQzMjZlY2E3ZC4uOGVmOTZkMmJiN2ZiNmEwMDA2YTgxM2UwMTAxM2Zk
OGQwN2ViMzJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMi0wMy0wNCAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBQ
cm92aWRlIERNQUJ1Zi1iYXNlZCBjb21wb3NpdGlvbiBsYXllcnMsIERNQUJ1ZlZpZGVvU2luayBp
bnRlZ3JhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW50cm9kdWNlIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGEgVGV4
dHVyZU1hcHBlciBwcm94eQorICAgICAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRsZXMgcGxh
dGZvcm0gbGF5ZXJzIGJhY2tlZCBieSBkbWFidWYgb2JqZWN0cy4KKyAgICAgICAgVGhpcyB3aWxs
IGJlIHVzZWQgdG8gaGFuZGxlIGRpc3BsYXkgb2YgZG1hYnVmIHByb2R1Y2VycyBsaWtlIEdTdHJl
YW1lcgorICAgICAgICBwaXBlbGluZXMgb3IgQU5HTEUtYmFja2VkIFdlYkdMIGNvbnRleHRzLiBU
aGUgRE1BQnVmTGF5ZXIgY2xhc3MgaXMgdGhlCisgICAgICAgIHBsYXRmb3JtIGxheWVyIG9iamVj
dCwgaGFuZGxpbmcgZGlzcGxheSBvZiB0aGUgYWN0dWFsIGRtYWJ1Zi4gVGhlIHByb3h5CisgICAg
ICAgIGl0c2VsZiBpcyB0YXNrZWQgd2l0aCBjcmVhdGluZyBhbmQgY2FjaGluZyBzdWNoIGxheWVy
cyBmb3IgYW55IGRtYWJ1ZgorICAgICAgICBvYmplY3QgdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhl
IHByb2R1Y2VyLgorCisgICAgICAgIEZvciBlYWNoIGRtYWJ1ZiBvYmplY3QgcHVzaGVkIGludG8g
dGhlIHByb3h5LCB0aGUgYWNjb3JkaW5nIERNQUJ1ZkxheWVyCisgICAgICAgIG9iamVjdCBpcyBz
cGF3bmVkIGFuZCBjYWNoZWQgZm9yIGZ1dHVyZSByZXVzZSwgZXhwZWN0aW5nIHRoZSBwcm9kdWNl
cgorICAgICAgICB0byBiZSBhYmxlIHRvIHByb3ZpZGUgZG1hYnVmcyBmcm9tIGEgcG9vbCBvciBz
d2FwY2hhaW4gb2YgdGhlc2Ugb2JqZWN0cy4KKyAgICAgICAgVGhlIGNhY2hlIGlzIGVtcHRpZWQg
d2hlbmV2ZXIgZG1hYnVmcyBnbyB1bnVzZWQgZm9yIGEgY2VydGFpbiBhbW91bnQgb2YKKyAgICAg
ICAgc3dhcHMsIG9yIGlmIHRoZSBzaXplIG9mIHRoZSBwcm92aWRlZCBkbWFidWZzIGNoYW5nZXMu
CisKKyAgICAgICAgRE1BQnVmRm9ybWF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBkaWZmZXJl
bnQgRFJNIGZvcm1hdHMsIGZvcgorICAgICAgICBpbnN0YW5jZSBob3cgZGlmZmVyZW50IHBsYW5l
cyBmb3Igc3BlY2lmaWMgZm9ybWF0cyBhcmUgZm9ybWF0dGVkIGFuZAorICAgICAgICBzaXplZC4K
KworICAgICAgICBETUFCdWZPYmplY3QgaXMgYSBjbGFzcyB0aGF0IGhhbmRsZXMgYSBnaXZlbiBn
cm91cGluZyBvZiBkbWFidWZzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZv
cm1hdC4gSXQgaGFzIGFuIGFzc29jaWF0ZWQgaGFuZGxlIHZhbHVlLAorICAgICAgICBzaXplLCBh
bmQgcGVyLXBsYW5lIGRtYWJ1ZiBmaWxlIGRlc2NyaXB0b3JzLCBvZmZzZXRzLCBzdHJpZGVzIGFu
ZAorICAgICAgICBtb2RpZmllcnMsIGFsb25nIHdpdGggYSBETUFCdWZSZWxlYXNlRmxhZyBpbnN0
YW5jZS4KKworICAgICAgICBETUFCdWZSZWxlYXNlRmxhZyBvYmplY3RzIGFyZSB1c2VkIGFzIGFu
IGV2ZW50ZmQtYmFzZWQgcmVsZWFzZSBtZWNoYW5pc20KKyAgICAgICAgdGhhdCBpbmRpY2F0ZXMg
dG8gdGhlIHByb2R1Y2VyIHRoYXQgdGhlIGdpdmVuIERNQUJ1Zk9iamVjdCBoYXMgYmVlbgorICAg
ICAgICBwcmVzZW50ZWQgYW5kIHN1YnNlcXVlbnRseSByZWxlYXNlZCBhbmQgaXMgdGh1cyBhdmFp
bGFibGUgZm9yIHJldXNlLgorCisgICAgICAgIEdCTUJ1ZmZlclN3YXBjaGFpbiBwcm92aWRlcyBh
IGN1c3RvbSBzd2FwY2hhaW4gaW1wbGVtZW50YXRpb24gdGhhdCdzCisgICAgICAgIGJhc2VkIG9u
IGxpYmdibSBmdW5jdGlvbmFsaXR5LiBFYWNoIHN1Y2ggc3dhcGNoYWluIGhhcyBhIGNhcGFjaXR5
CisgICAgICAgIHNwZWNpZmllZCBkdXJpbmcgY29uc3RydWN0aW9uLCB3aXRoIHRoZSBjYXBhY2l0
aWVzIG9mIGZvdXIgb3IgZWlnaHQKKyAgICAgICAgY3VycmVudGx5IHN1cHBvcnRlZC4gZ2V0QnVm
ZmVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBwcm9kdWNlciB0byBvYnRhaW4gYQorICAgICAgICBidWZm
ZXIgb2JqZWN0IHRoYXQncyB0aGVuIHVzZWQgZm9yIGJhY2tpbmcgb2Ygc3BlY2lmaWMgY29udGVu
dCBsaWtlCisgICAgICAgIEFOR0xFIGV4ZWN1dGlvbiBvciBtZWRpYSdzIHNvZnR3YXJlLWRlY29k
ZWQgdmlkZW8gZnJhbWVzLiBCdWZmZXJzCisgICAgICAgIG9idGFpbmVkIHRoaXMgd2F5IGFyZSBt
b3ZlZCBvdmVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhcnJheSwgd2l0aAorICAgICAgICB0
aGUgZXhwZWN0YXRpb24gb2YgcmV1c2luZyB0aGVtIG9uY2UgdGhleSBhcmUgcmVsZWFzZWQgYnkg
dGhlCisgICAgICAgIGNvbXBvc2l0aW9uIGVuZ2luZS4KKworICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgZW5oYW5jZWQgdG8gdXNlIHRoZQorICAg
ICAgICByZWNlbnRseS1hZGRlZCBXZWJLaXRETUFCdWZWaWRlb1NpbmsgZWxlbWVudCBpZiBpdHMg
dXNlIGlzIGVuYWJsZWQKKyAgICAgICAgdGhyb3VnaCB0aGUgZGV2ZWxvcG1lbnQtcHVycG9zZSBl
bnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgaWYgdGhlCisgICAgICAgIG5lY2Vzc2FyeSBHU3RyZWFt
ZXIgZmFjaWxpdGllcyBhcmUgcHJlc2VudCBvbiB0aGUgc3lzdGVtLiBXaGVuIHRoZXNlCisgICAg
ICAgIGNvbmRpdGlvbnMgYXJlIG1ldCwgdGhlIE5pY29zaWE6OkNvbnRlbnRMYXllciBpbnN0YW5j
ZSBpcyBhbHNvCisgICAgICAgIGNvbnN0cnVjdGVkIHdpdGggYSBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmIGluc3RhbmNlLCBzaW5jZQorICAgICAgICB3ZSBleHBlY3QgdG8g
cHJlc2VudCB0aGUgZG1hYnVmcyB0aHJvdWdoIHRoYXQgZnVuY3Rpb25hbGl0eS4KKworICAgICAg
ICBXaXRoIHRoZSBXZWJLaXRETUFCdWZWaWRlb1NpbmssIHRoZSBpbmNvbWluZyBzYW1wbGVzIGFy
ZSBlaXRoZXIgYmFzZWQKKyAgICAgICAgb24gZG1hYnVmcyAoaW4gY2FzZSBvZiBkbWFidWYtY2Fw
YWJsZSBoYXJkd2FyZSBkZWNvZGVyKSBvciBhcmUganVzdCByYXcKKyAgICAgICAgZGF0YSAobW9z
dCBsaWtlbHkgY29taW5nIGZyb20gYSBzb2Z0d2FyZS1iYXNlZCBkZWNvZGVyKS4gSW4gY2FzZSBv
ZgorICAgICAgICBkbWFidWZzIHdlIGNhbiB1c2UgdGhlIEdzdE1lbW9yeSBwb2ludGVyIGFzIHRo
ZSBoYW5kbGUgdGhyb3VnaCB3aGljaAorICAgICAgICB0aGUgcmVsZXZhbnQgZGF0YSBpcyBjYWNo
ZWQgaW4gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwKKyAgICAgICAgYW5k
IHVwb24gdGhlIGZpcnN0IG9jY3VycmVuY2Ugd2UgcmV0cmlldmUgYWxsIHRoZSByZWxldmFudCBk
bWFidWYgZGF0YQorICAgICAgICBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IHRoYXQgcHJveHkg
aW1wbGVtZW50YXRpb24gdG8gY29uc3RydWN0IGEKKyAgICAgICAgcmVuZGVyYWJsZSBFR0xJbWFn
ZS4KKworICAgICAgICBJbiBjYXNlIG9mIHNvZnR3YXJlLWRlY29kZWQgcmF3IGRhdGEsIHdlIGhh
dmUgdG8gdXNlIHRoZSBzd2FwY2hhaW4KKyAgICAgICAgb2JqZWN0IGFuZCBjb3B5IHRoZSBkYXRh
IG9uIGEgcGVyLXBsYW5lIGJhc2lzIGZvciBlYWNoIHN1Y2ggc2FtcGxlLAorICAgICAgICBmaW5h
bGx5IHB1c2hpbmcgdGhlIGRtYWJ1ZiBkYXRhIG9mIHRoYXQgc3dhcGNoYWluIGJ1ZmZlciBpbnRv
IHRoZQorICAgICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmIGluc3Rh
bmNlLgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQRS50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKToKKyAgICAgICAgKFdlYkNvcmU6
OkRNQUJ1ZkZvcm1hdDo6cGxhbmVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFC
dWZGb3JtYXQ6OnBsYW5lSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZv
cm1hdDo6UGxhbmU6OlBsYW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6
OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXRJ
bXBsOjpkZWZpbmVQbGFuZSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6Omluc3Rh
bnRpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmT2JqZWN0OjpETUFCdWZPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmT2JqZWN0Ojp+RE1BQnVmT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1
Zk9iamVjdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1B
QnVmUmVsZWFzZUZsYWcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxlYXNl
RmxhZzo6RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFz
ZUZsYWc6On5ETUFCdWZSZWxlYXNlRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxl
YXNlRmxhZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJlbGVhc2VGbGFn
OjpkdXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6OnJlbGVh
c2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjpyZWxlYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkdCTUJ1ZmZl
clN3YXBjaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OmdldEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpjcmVh
dGVETUFCdWZPYmplY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNo
YWluOjpCdWZmZXI6OlBsYW5lRGF0YTo6flBsYW5lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpoYW5kbGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6Om51bVBsYW5lcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6cGxhbmVEYXRhIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxl
ZCk6CisgICAgICAgICh3ZWJLaXRETUFCdWZWaWRlb1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtH
U3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpmb3VyY2NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hETUFCdWZUb0NvbXBvc2l0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZVZpZGVvU2lua0RNQUJ1Zik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbC5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlS0hSKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lJbWFnZUtIUik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1h
Z2VEYXRhOjp+RUdMSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmFjdGl2YXRlT25Db21wb3NpdGluZ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHlETUFCdWY6OnN3YXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6cHVzaERNQUJ1Zik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RE1B
QnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1Zkxh
eWVyOjpjcmVhdGVFR0xJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmg6IEFkZGVkLgorCiAy
MDIyLTAzLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICB3
ZWJydGMvY2FudmFzLXRvLXBlZXItY29ubmVjdGlvbi5odG1sIGlzIGZsYWtpbHkgZmFpbGluZyBh
IHRlc3QgYXNzZXJ0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDRlMzAzMzVjZmFkOWVkNzli
MDU3MzczMWY1MjQxMmNiYjlkMjZiMzYuLmI1ZTU4Y2NkNzYxOWU0N2M3N2NiN2IyYzZkN2JhNTgx
Y2FiMDI1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC0xMDEsNiArMTAxLDcgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9y
bS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9y
bS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMWDExLmNwcCBAbm8tdW5pZnkKIAorcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2di
bS9HQk1EZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3Bw
IEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRleCA1N2ZhN2NhNjdjNGRlYTRhOWU1Yjk4
NDVlNzJhZTI1ODczZDhjZjU1Li5mOGM4YzcwNDkyZmIwOWQxMDlhZWQxMTg0YjdjNjljYTI1ZWIy
ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtODksNiArODksNyBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0
RUdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAKIAor
cGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2dibS9HQk1EZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0
Zm9ybURpc3BsYXlMaWJXUEUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZQppbmRleCA0ZTBhZWJlMTk3NDc3ODhkNjQwZGM5OTVhNjZjNDNiYmEyYzkxODE2
Li43M2Y2OWM1MDk0NzBlZjhhZTk3OWNjZDk3ZDYxYTBmNzg4YTU0N2Y1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTM0LDYgKzM0LDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5UHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU29saWRDb2xvckxheWVyLmgKQEAgLTYwLDYgKzYxLDcgQEAgaWYgKFVTRV9D
T09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJEbWFidWYuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1Zi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5jcHAKIAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVm
Rm9ybWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9y
bWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGNkNzI1YTk3MDE1M2M0ZmY3OGE3YmI0OGUwN2I4YzBlN2Y3YzQz
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2di
bS9ETUFCdWZGb3JtYXQuaApAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNp
bmNsdWRlIDxjc3RkaW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBETUFC
dWZGb3JtYXRJbXBsIHsKKworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjcmVhdGVGb3VyQ0Mo
Y2hhciBhLCBjaGFyIGIsIGNoYXIgYywgY2hhciBkKQoreworICAgIHJldHVybiB1aW50MzJfdChh
KSB8ICh1aW50MzJfdChiKSA8PCA4KSB8ICh1aW50MzJfdChjKSA8PCAxNikgfCAodWludDMyX3Qo
ZCkgPDwgMjQpOworfQorCit9CisKK3N0cnVjdCBETUFCdWZGb3JtYXQgeworICAgIGVudW0gY2xh
c3MgRm91ckNDIDogdWludDMyX3QgeworICAgICAgICBJbnZhbGlkID0gMCwKKworICAgICAgICBS
OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICc4JywgJyAnLCAnICcpLAor
ICAgICAgICBHUjg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdHJywgJ1InLCAn
OCcsICc4JyksCisKKyAgICAgICAgWFJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVG
b3VyQ0MoJ1gnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgWEJHUjg4ODggPSBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1gnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCWDg4
ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnWCcsICcyJywgJzQnKSwK
KyAgICAgICAgQkdSWDg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAn
WCcsICcyJywgJzQnKSwKKyAgICAgICAgQVJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ0EnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgQUJHUjg4ODggPSBETUFCdWZG
b3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdC
QTg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnQScsICcyJywgJzQn
KSwKKyAgICAgICAgQkdSQTg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0In
LCAnQScsICcyJywgJzQnKSwKKyAgICAgICAgUkdCODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3Jl
YXRlRm91ckNDKCdSJywgJ0cnLCAnMicsICc0JyksCisgICAgICAgIEJHUjg4OCA9IERNQUJ1ZkZv
cm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdHJywgJzInLCAnNCcpLAorCisgICAgICAgIEk0
MjAgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0knLCAnNCcsICcyJywgJzAnKSwK
KyAgICAgICAgWVYxMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywg
JzEnLCAnMicpLAorICAgICAgICBBNDIwID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckND
KCdBJywgJzQnLCAnMicsICcwJyksCisgICAgICAgIE5WMTIgPSBETUFCdWZGb3JtYXRJbXBsOjpj
cmVhdGVGb3VyQ0MoJ04nLCAnVicsICcxJywgJzInKSwKKyAgICAgICAgTlYyMSA9IERNQUJ1ZkZv
cm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzInLCAnMScpLAorCisgICAgICAgIFlV
WTIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1knLCAnVScsICdZJywgJzInKSwK
KyAgICAgICAgWVZZVSA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywg
J1knLCAnVScpLAorICAgICAgICBVWVZZID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckND
KCdVJywgJ1knLCAnVicsICdZJyksCisgICAgICAgIFZZVVkgPSBETUFCdWZGb3JtYXRJbXBsOjpj
cmVhdGVGb3VyQ0MoJ1YnLCAnWScsICdVJywgJ1knKSwKKyAgICAgICAgVlVZQSA9IERNQUJ1ZkZv
cm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdVJywgJ1knLCAnQScpLAorICAgICAgICBBWVVW
ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ1knLCAnVScsICdWJyksCisK
KyAgICAgICAgWTQ0NCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0Jywg
JzQnLCAnNCcpLAorICAgICAgICBZNDFCID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckND
KCdZJywgJzQnLCAnMScsICdCJyksCisgICAgICAgIFk0MkIgPSBETUFCdWZGb3JtYXRJbXBsOjpj
cmVhdGVGb3VyQ0MoJ1knLCAnNCcsICcyJywgJ0InKSwKKyAgICB9OworCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBjX21heFBsYW5lcyA9IDQ7CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0M+
IHN0YXRpYyBETUFCdWZGb3JtYXQgY3JlYXRlKCkgPSBkZWxldGU7CisgICAgc3RhdGljIERNQUJ1
ZkZvcm1hdCBjcmVhdGUodWludDMyX3QpOworCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJjY1Zh
bHVlLCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KKyAgICBzdGF0aWMgRE1BQnVm
Rm9ybWF0IGluc3RhbnRpYXRlKCk7CisKKyAgICBGb3VyQ0MgZm91cmNjIHsgRm91ckNDOjpJbnZh
bGlkIH07CisgICAgdW5zaWduZWQgbnVtUGxhbmVzIHsgMCB9OworCisgICAgdWludDMyX3QgcGxh
bmVXaWR0aCh1bnNpZ25lZCBwbGFuZUluZGV4LCB1aW50MzJfdCB3aWR0aCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwgY19tYXhQbGFuZXMpOworICAgICAgICByZXR1
cm4gKHdpZHRoID4+IHBsYW5lc1twbGFuZUluZGV4XS5ob3Jpem9udGFsU3Vic2FtcGxpbmcpOwor
ICAgIH0KKworICAgIHVpbnQzMl90IHBsYW5lSGVpZ2h0KHVuc2lnbmVkIHBsYW5lSW5kZXgsIHVp
bnQzMl90IGhlaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwg
Y19tYXhQbGFuZXMpOworICAgICAgICByZXR1cm4gKGhlaWdodCA+PiBwbGFuZXNbcGxhbmVJbmRl
eF0udmVydGljYWxTdWJzYW1wbGluZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8Rm91ckNDIGZv
dXJjY1ZhbHVlLCB1bnNpZ25lZCBoc1ZhbHVlLCB1bnNpZ25lZCB2c1ZhbHVlPgorICAgIHN0cnVj
dCBQbGFuZURlZmluaXRpb24geworICAgICAgICBzdGF0aWMgY29uc3RleHByIEZvdXJDQyBmb3Vy
Y2MgPSBmb3VyY2NWYWx1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBob3Jp
em9udGFsU3Vic2FtcGxpbmcgPSBoc1ZhbHVlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHZlcnRpY2FsU3Vic2FtcGxpbmcgPSB2c1ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1
Y3QgUGxhbmUgeworICAgICAgICBQbGFuZSgpID0gZGVmYXVsdDsKKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQbGFuZURlZml0aW9uVHlwZT4KKyAgICAgICAgUGxhbmUoY29uc3QgUGxhbmVE
ZWZpdGlvblR5cGUmKQorICAgICAgICAgICAgOiBmb3VyY2MoUGxhbmVEZWZpdGlvblR5cGU6OmZv
dXJjYykKKyAgICAgICAgICAgICwgaG9yaXpvbnRhbFN1YnNhbXBsaW5nKFBsYW5lRGVmaXRpb25U
eXBlOjpob3Jpem9udGFsU3Vic2FtcGxpbmcpCisgICAgICAgICAgICAsIHZlcnRpY2FsU3Vic2Ft
cGxpbmcoUGxhbmVEZWZpdGlvblR5cGU6OnZlcnRpY2FsU3Vic2FtcGxpbmcpCisgICAgICAgIHsg
fQorCisgICAgICAgIEZvdXJDQyBmb3VyY2MgeyBGb3VyQ0M6OkludmFsaWQgfTsKKyAgICAgICAg
dW5zaWduZWQgaG9yaXpvbnRhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgICAgICB1bnNpZ25lZCB2
ZXJ0aWNhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgIH07CisgICAgc3RkOjphcnJheTxQbGFuZSwg
Y19tYXhQbGFuZXM+IHBsYW5lczsKK307CisKK25hbWVzcGFjZSBETUFCdWZGb3JtYXRJbXBsIHsK
KwordGVtcGxhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0MgZm91cmNjVmFsdWU+CitpbmxpbmUgRE1B
QnVmRm9ybWF0IGNyZWF0ZVNpbmdsZVBsYW5lUkdCQSgpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdDo6aW5zdGFudGlhdGU8Zm91cmNjVmFsdWUsCisgICAgICAgIERNQUJ1ZkZvcm1hdDo6UGxh
bmVEZWZpbml0aW9uPGZvdXJjY1ZhbHVlLCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8c2l6ZV90
IEluZGV4LCBzaXplX3QgU2l6ZSwgdHlwZW5hbWUgUGxhbmVEZWZpbml0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gUGxhbmVEZWZpbml0aW9uVHlwZXM+Cit2b2lkIGRlZmluZVBsYW5lKHN0ZDo6YXJyYXk8
RE1BQnVmRm9ybWF0OjpQbGFuZSwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4mIHBsYW5lcykK
K3sKKyAgICBuZXcgKCZwbGFuZXNbSW5kZXhdKSBETUFCdWZGb3JtYXQ6OlBsYW5lKFBsYW5lRGVm
aW5pdGlvblR5cGUgeyB9KTsKKyAgICBpZiBjb25zdGV4cHIgKChJbmRleCArIDEpIDwgU2l6ZSkK
KyAgICAgICAgZGVmaW5lUGxhbmU8SW5kZXggKyAxLCBTaXplLCBQbGFuZURlZmluaXRpb25UeXBl
cy4uLj4ocGxhbmVzKTsKK30KKworfQorCit0ZW1wbGF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQyBm
b3VyY2NWYWx1ZSwgdHlwZW5hbWUuLi4gUGxhbmVEZWZpbml0aW9uVHlwZXM+CitpbmxpbmUgRE1B
QnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGUoKQoreworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mLi4uKFBsYW5lRGVmaW5pdGlvblR5cGVzKSA8PSA0KTsKKworICAgIERNQUJ1ZkZv
cm1hdCBmb3JtYXQ7CisgICAgZm9ybWF0LmZvdXJjYyA9IGZvdXJjY1ZhbHVlOworICAgIGZvcm1h
dC5udW1QbGFuZXMgPSBzaXplb2YuLi4oUGxhbmVEZWZpbml0aW9uVHlwZXMpOworICAgIERNQUJ1
ZkZvcm1hdEltcGw6OmRlZmluZVBsYW5lPDAsIHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBl
cyksIFBsYW5lRGVmaW5pdGlvblR5cGVzLi4uPihmb3JtYXQucGxhbmVzKTsKKyAgICByZXR1cm4g
Zm9ybWF0OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1h
dDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4OD4oKQoreworICAgIHJldHVy
biBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpYUkdCODg4
OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6
OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg+KCkKK3sKKyAgICByZXR1cm4g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6WEJHUjg4ODg+
KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0Ojpj
cmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQlg4ODg4PigpCit7CisgICAgcmV0dXJuIERN
QUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlJHQlg4ODg4Pigp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JYODg4OD4oKQoreworICAgIHJldHVybiBETUFC
dWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpCR1JYODg4OD4oKTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0
ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVm
Rm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QVJHQjg4ODg+KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFCR1I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OkFCR1I4ODg4PigpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpSR0JBODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpSR0JBODg4OD4oKTsKK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0
SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QkdSQTg4ODg+KCk7Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVm
Rm9ybWF0OjpGb3VyQ0M6Okk0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0
YW50aWF0ZTxGb3VyQ0M6Okk0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4
LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAg
ICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0
OjpGb3VyQ0M6OllWMTI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0
ZTxGb3VyQ0M6OllWMTIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAw
PiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQ
bGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6OkE0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3Vy
Q0M6OkE0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OlI4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBE
TUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYxMj4oKQoreworICAg
IHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYxMiwKKyAgICAgICAg
UGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1
ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMT4o
KQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYyMSwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFu
ZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJD
Qzo6WVVZMj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJD
Qzo6WVVZMiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwgMD4+KCk7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVh
dGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9y
bWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OllWWVUsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxG
b3VyQ0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9y
bWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpVWVZZPigpCit7
CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpVWVZZLAorICAg
ICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3Jt
YXQ6OkZvdXJDQzo6VllVWT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRp
YXRlPEZvdXJDQzo6WVZZVSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwg
MCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9y
bWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE+KCkKK3sKKyAgICByZXR1cm4g
RE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlZVWUEsCisgICAgICAgIFBsYW5lRGVm
aW5pdGlvbjxGb3VyQ0M6OkFCR1I4ODg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJD
Qzo6QVlVVj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJD
Qzo6VlVZQSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6QUJHUjg4ODgsIDAsIDA+
PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDQ0PigpCit7CisgICAgcmV0dXJuIERNQUJ1
ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZNDQ0LAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4
LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+PigpOwor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRl
PERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDFCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1h
dDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZNDFCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91
ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAyLCAw
PiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDIsIDA+PigpOworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpZNDJCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5z
dGFudGlhdGU8Rm91ckNDOjpZNDJCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpS
OCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAwPiwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDA+PigpOworfQorCitpbmxpbmUg
RE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlKHVpbnQzMl90IGZvdXJjY1ZhbHVlKQor
eworICAgIHN3aXRjaCAoZm91cmNjVmFsdWUpIHsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6
WFJHQjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WFJHQjg4ODg+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlhCR1I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZTxGb3VyQ0M6OlhCR1I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpSR0JYODg4
OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpSR0JYODg4OD4oKTsKKyAgICBjYXNl
IHVpbnQzMl90KEZvdXJDQzo6QkdSWDg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJD
Qzo6QkdSWDg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFSR0I4ODg4KToKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFSR0I4ODg4PigpOworICAgIGNhc2UgdWludDMy
X3QoRm91ckNDOjpBQkdSODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBQkdS
ODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6UkdCQTg4ODgpOgorICAgICAgICBy
ZXR1cm4gY3JlYXRlPEZvdXJDQzo6UkdCQTg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3Vy
Q0M6OkJHUkE4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkJHUkE4ODg4Pigp
OworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpJNDIwKToKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZTxGb3VyQ0M6Okk0MjA+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllWMTIpOgorICAg
ICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WVYxMj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZv
dXJDQzo6QTQyMCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBNDIwPigpOworICAg
IGNhc2UgdWludDMyX3QoRm91ckNDOjpOVjEyKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3Vy
Q0M6Ok5WMTI+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Ok5WMjEpOgorICAgICAgICBy
ZXR1cm4gY3JlYXRlPEZvdXJDQzo6TlYyMT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6
WVVZMik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZVVkyPigpOworICAgIGNhc2Ug
dWludDMyX3QoRm91ckNDOjpZVllVKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllW
WVU+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlVZVlkpOgorICAgICAgICByZXR1cm4g
Y3JlYXRlPEZvdXJDQzo6VVlWWT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VllVWSk6
CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpVWVZZPigpOworICAgIGNhc2UgdWludDMy
X3QoRm91ckNDOjpWVVlBKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlZVWUE+KCk7
CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFZVVYpOgorICAgICAgICByZXR1cm4gY3JlYXRl
PEZvdXJDQzo6QVlVVj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQ0NCk6CisgICAg
ICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZNDQ0PigpOworICAgIGNhc2UgdWludDMyX3QoRm91
ckNDOjpZNDFCKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Olk0MUI+KCk7CisgICAg
Y2FzZSB1aW50MzJfdChGb3VyQ0M6Olk0MkIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJD
Qzo6WTQyQj4oKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDg2NDQ0NDQzOTRmN2I5ZDlmZjQzZGNiZGMzOTJhYmFhNzdjYzVhNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFC
dWZSZWxlYXNlRmxhZy5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRkZWY+Cisj
aW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdHJ1Y3QgRE1BQnVmT2JqZWN0IHsKKyAgICBETUFCdWZPYmplY3QodWludHB0cl90
IGhhbmRsZSkKKyAgICAgICAgOiBoYW5kbGUoaGFuZGxlKQorICAgIHsgfQorCisgICAgfkRNQUJ1
Zk9iamVjdCgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0
Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICBpZiAoZmRbaV0gIT0gLTEpCisgICAgICAg
ICAgICAgICAgY2xvc2UoZmRbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2Jq
ZWN0KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworICAgIERNQUJ1Zk9iamVjdCYgb3Bl
cmF0b3I9KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworCisgICAgRE1BQnVmT2JqZWN0
KERNQUJ1Zk9iamVjdCYmIG8pCisgICAgICAgIDogaGFuZGxlKG8uaGFuZGxlKQorICAgICAgICAs
IGZvcm1hdChvLmZvcm1hdCkKKyAgICAgICAgLCB3aWR0aChvLndpZHRoKQorICAgICAgICAsIGhl
aWdodChvLmhlaWdodCkKKyAgICAgICAgLCByZWxlYXNlRmxhZyhXVEZNb3ZlKG8ucmVsZWFzZUZs
YWcpKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1hdC5udW1Q
bGFuZXM7ICsraSkgeworICAgICAgICAgICAgZmRbaV0gPSBvLmZkW2ldOworICAgICAgICAgICAg
by5mZFtpXSA9IC0xOworCisgICAgICAgICAgICBvZmZzZXRbaV0gPSBvLm9mZnNldFtpXTsKKyAg
ICAgICAgICAgIHN0cmlkZVtpXSA9IG8uc3RyaWRlW2ldOworICAgICAgICAgICAgbW9kaWZpZXJb
aV0gPSBvLm1vZGlmaWVyW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2JqZWN0
JiBvcGVyYXRvcj0oRE1BQnVmT2JqZWN0JiYgbykKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09
ICZvKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIHRoaXMtPn5ETUFCdWZP
YmplY3QoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBETUFCdWZPYmplY3QoV1RGTW92ZShvKSk7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB1aW50cHRyX3QgaGFuZGxlIHsgMCB9
OworICAgIERNQUJ1ZkZvcm1hdCBmb3JtYXQgeyB9OworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9
OworICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICBETUFCdWZSZWxlYXNlRmxhZyByZWxl
YXNlRmxhZyB7IH07CisgICAgc3RkOjphcnJheTxpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFu
ZXM+IGZkIHsgLTEsIC0xLCAtMSwgLTEgfTsKKyAgICBzdGQ6OmFycmF5PHNpemVfdCwgRE1BQnVm
Rm9ybWF0OjpjX21heFBsYW5lcz4gb2Zmc2V0IHsgMCwgMCwgMCwgMCB9OworICAgIHN0ZDo6YXJy
YXk8dWludDMyX3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHN0cmlkZSB7IDAsIDAsIDAs
IDAgfTsKKyAgICBzdGQ6OmFycmF5PHVpbnQ2NF90LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVz
PiBtb2RpZmllciB7IDAsIDAsIDAsIDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZS
ZWxlYXNlRmxhZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1
ZlJlbGVhc2VGbGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y0ZDc3NjAwNTNmOTljNTU4NzY1MGEwODZhYWI5
NzEwNDg3NWY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dibS9ETUFCdWZSZWxlYXNlRmxhZy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxzeXMvZXZlbnRmZC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRE1BQnVmUmVsZWFzZUZsYWcgeworICAgIERNQUJ1ZlJl
bGVhc2VGbGFnKCkgPSBkZWZhdWx0OworCisgICAgZW51bSBJbml0aWFsaXplVGFnIHsgSW5pdGlh
bGl6ZSB9OworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKEluaXRpYWxpemVUYWcpCisgICAgeworICAg
ICAgICBmZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMgfCBFRkRfTk9OQkxPQ0spOworICAgIH0K
KworICAgIH5ETUFCdWZSZWxlYXNlRmxhZygpCisgICAgeworICAgICAgICBpZiAoZmQgIT0gLTEp
CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7CisgICAgfQorCisgICAg
RE1BQnVmUmVsZWFzZUZsYWcoY29uc3QgRE1BQnVmUmVsZWFzZUZsYWcmKSA9IGRlbGV0ZTsKKyAg
ICBETUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KGNvbnN0IERNQUJ1ZlJlbGVhc2VGbGFnJikg
PSBkZWxldGU7CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhETUFCdWZSZWxlYXNlRmxhZyYmIG8p
CisgICAgeworICAgICAgICBmZCA9IG8uZmQ7CisgICAgICAgIG8uZmQgPSAtMTsKKyAgICB9CisK
KyAgICBETUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KERNQUJ1ZlJlbGVhc2VGbGFnJiYgbykK
KyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvKQorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworCisgICAgICAgIHRoaXMtPn5ETUFCdWZSZWxlYXNlRmxhZygpOworICAgICAgICBuZXcgKHRo
aXMpIERNQUJ1ZlJlbGVhc2VGbGFnKFdURk1vdmUobykpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgRE1BQnVmUmVsZWFzZUZsYWcgZHVwKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgRE1B
QnVmUmVsZWFzZUZsYWcgZmxhZzsKKyAgICAgICAgZmxhZy5mZCA9IGR1cENsb3NlT25FeGVjKGZk
KTsKKyAgICAgICAgcmV0dXJuIGZsYWc7CisgICAgfQorCisgICAgYm9vbCByZWxlYXNlZCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDAgfTsKKyAgICAgICAgaWYgKHJlYWQoZmQs
ICZ2YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAg
ICAgIHJldHVybiAhIXZhbHVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dm9pZCByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDEgfTsKKyAgICAgICAgd3JpdGUo
ZmQsICZ2YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgfQorCisgICAgaW50IGZkIHsgLTEg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjRkYTdlZDYzM2E2ZmViZWJkZjFkOTE4ODVmMzUzNDQxODEwNDBjZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZm
ZXJTd2FwY2hhaW4uY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdCTUJ1ZmZl
clN3YXBjaGFpbi5oIgorCisjaW5jbHVkZSAiR0JNRGV2aWNlLmgiCisjaW5jbHVkZSA8Z2JtLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0JNQnVmZmVyU3dhcGNoYWluOjpHQk1CdWZmZXJT
d2FwY2hhaW4oQnVmZmVyU3dhcGNoYWluU2l6ZSBzaXplKQoreworICAgIEFTU0VSVCh1bnNpZ25l
ZChzaXplKSA8IGNfbWF4QnVmZmVycyk7CisgICAgbV9hcnJheS5zaXplID0gdW5zaWduZWQoc2l6
ZSk7Cit9CisKK0dCTUJ1ZmZlclN3YXBjaGFpbjo6fkdCTUJ1ZmZlclN3YXBjaGFpbigpID0gZGVm
YXVsdDsKKworUmVmUHRyPEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyPiBHQk1CdWZmZXJTd2Fw
Y2hhaW46OmdldEJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7
CisgICAgYXV0byYgZGV2aWNlID0gR0JNRGV2aWNlOjpnZXQoKTsKKworICAgIC8vIElmIHRoZSBk
ZXNjcmlwdGlvbiBvZiB0aGUgcmVxdWVzdGVkIGJ5ZmZlcnMgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0
aGUgZGVzY3JpcHRpb24gdG8gdGhlIG5ldyBvbmUgYW5kIHdyZWNrIHRoZSBleGlzdGluZyBidWZm
ZXJzLgorICAgIC8vIFRoaXMgc2hvdWxkIGhhbmRsZSBjaGFuZ2VzIGluIGZvcm1hdCBvciBkaW1l
bnNpb24gb2YgdGhlIGJ1ZmZlcnMuCisgICAgaWYgKGRlc2NyaXB0aW9uLmZvcm1hdC5mb3VyY2Mg
IT0gbV9hcnJheS5kZXNjcmlwdGlvbi5mb3JtYXQuZm91cmNjIHx8IGRlc2NyaXB0aW9uLndpZHRo
ICE9IG1fYXJyYXkuZGVzY3JpcHRpb24ud2lkdGggfHwgZGVzY3JpcHRpb24uaGVpZ2h0ICE9IG1f
YXJyYXkuZGVzY3JpcHRpb24uaGVpZ2h0KSB7CisgICAgICAgIG1fYXJyYXkuZGVzY3JpcHRpb24g
PSBkZXNjcmlwdGlvbjsKKyAgICAgICAgbV9hcnJheS5vYmplY3QgPSB7IH07CisgICAgfQorCisg
ICAgLy8gU3dhcGNoYWluIHdhcyBhc2tlZCB0byBwcm92aWRlIGEgYnVmZmVyLiBUaGUgYnVmZmVy
IGFycmF5IGlzIHRyYXZlcnNlZCB0byBmaW5kIG9uZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hcnJheS5zaXplOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2FycmF5Lm9iamVjdFtp
XSkgeworICAgICAgICAgICAgLy8gSWYgbm8gYnVmZmVyIHdhcyBzcGF3bmVkIHlldCBhdCB0aGlz
IGxvY2F0aW9uLCB3ZSBkbyB0aGF0LCBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAgYXV0byBi
dWZmZXIgPSBhZG9wdFJlZigqbmV3IEJ1ZmZlcihtX2hhbmRsZUdlbmVyYXRvcisrLCBkZXNjcmlw
dGlvbikpOworICAgICAgICAgICAgbV9hcnJheS5vYmplY3RbaV0gPSBidWZmZXIuY29weVJlZigp
OworCisgICAgICAgICAgICAvLyBGaWxsIG91dCB0aGUgYnVmZmVyJ3MgZGVzY3JpcHRpb24gYW5k
IHBsYW5lIGluZm9ybWF0aW9uIGZvciBrbm93biBhbmQgc3VwcG9ydGVkIGZvcm1hdHMuCisgICAg
ICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmZvcm1hdC5mb3VyY2MpIHsKKyAgICAgICAgICAg
IGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4OgorICAgICAgICAgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpSR0JYODg4ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpG
b3VyQ0M6OkJHUlg4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
QVJHQjg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4
ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQkE4ODg4OgorICAg
ICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODg6CisgICAgICAgICAg
ICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpJNDIwOgorICAgICAgICAgICAgY2FzZSBETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6WVYxMjoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpG
b3VyQ0M6OkE0MjA6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjEy
OgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMToKKyAgICAgICAg
ICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllVWTI6CisgICAgICAgICAgICBjYXNlIERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVllVOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6VVlWWToKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZZ
VVk6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpWVVlBOgorICAgICAg
ICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVlVVjoKKyAgICAgICAgICAgIGNhc2Ug
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0NDQ6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1h
dDo6Rm91ckNDOjpZNDFCOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WTQyQjoKKyAgICAgICAgICAgICAgICBidWZmZXItPm1fZGVzY3JpcHRpb24uZm9ybWF0Lm51bVBs
YW5lcyA9IGRlc2NyaXB0aW9uLmZvcm1hdC5udW1QbGFuZXM7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlci0+bV9kZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxh
bmVzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5tX3BsYW5lc1tpXS5mb3Vy
Y2MgPSBkZXNjcmlwdGlvbi5mb3JtYXQucGxhbmVzW2ldLmZvdXJjYzsKKyAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLT5tX3BsYW5lc1tpXS53aWR0aCA9IGRlc2NyaXB0aW9uLmZvcm1hdC5wbGFu
ZVdpZHRoKGksIGRlc2NyaXB0aW9uLndpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVy
LT5tX3BsYW5lc1tpXS5oZWlnaHQgPSBkZXNjcmlwdGlvbi5mb3JtYXQucGxhbmVIZWlnaHQoaSwg
ZGVzY3JpcHRpb24uaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBwbGFuZSwgd2Ug
c3Bhd24gYSBnYm1fYm8gb2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIGFuZCBmb3JtYXQu
CisgICAgICAgICAgICAvLyBUT0RPOiBHQk1fQk9fVVNFX0xJTkVBUiB3aWxsIGJlIG5lZWRlZCB3
aGVuIHRyYW5zZmVycmluZyBtZW1vcnkgaW50byB0aGUgYm8gKGUuZy4gY29weWluZworICAgICAg
ICAgICAgLy8gb3ZlciB0aGUgc29mdHdhcmUtZGVjb2RlZCB2aWRlbyBkYXRhKSwgYnV0IG1pZ2h0
IG5vdCBiZSByZXF1aXJlZCBmb3IgYmFja2luZyBlLmcuIEFOR0xFIHJlbmRlcmluZy4KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXItPm1fZGVzY3JpcHRpb24uZm9y
bWF0Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcGxhbmUgPSBidWZm
ZXItPm1fcGxhbmVzW2ldOworICAgICAgICAgICAgICAgIHBsYW5lLmJvID0gZ2JtX2JvX2NyZWF0
ZShkZXZpY2UuZGV2aWNlKCksIHBsYW5lLndpZHRoLCBwbGFuZS5oZWlnaHQsIHVpbnQzMl90KHBs
YW5lLmZvdXJjYyksIEdCTV9CT19VU0VfTElORUFSKTsKKyAgICAgICAgICAgICAgICBwbGFuZS5z
dHJpZGUgPSBnYm1fYm9fZ2V0X3N0cmlkZShwbGFuZS5ibyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIExvY2sgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAg
YnVmZmVyLT5tX3N0YXRlLmxvY2tlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVy
OworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhbiBleGlzdGluZyBi
dWZmZXIgYXQgdGhpcyBsb2NhdGlvbi4gSWYgbWFya2VkIGFzIGxvY2tlZCwgdXBkYXRlIGl0cyBz
dGF0ZSBieSByZWFkaW5nCisgICAgICAgIC8vIHRoZSByZWxlYXNlIGZsYWcuIElmIHN0aWxsIGxv
Y2tlZCBhZnRlciB0aGF0LCB3ZSBoYXZlIHRvIGNvbnRpbnVlIG92ZXIgdG8gdGhlIG5leHQgY2Fu
ZGlkYXRlLgorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2FycmF5Lm9i
amVjdFtpXTsKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1fc3RhdGUubG9ja2VkKQorICAgICAg
ICAgICAgICAgIGJ1ZmZlci0+bV9zdGF0ZS5sb2NrZWQgPSAhYnVmZmVyLT5tX3N0YXRlLnJlbGVh
c2VGbGFnLnJlbGVhc2VkKCk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1fc3RhdGUubG9j
a2VkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGhpcyBidWZmZXIgd2FzIHVubG9ja2VkLCBzbyBpdCBjYW4gYmUgdXNlZC4gTG9jayBhbmQgcmV0
dXJuIGl0LgorICAgICAgICBhdXRvIGJ1ZmZlciA9IG1fYXJyYXkub2JqZWN0W2ldLmNvcHlSZWYo
KTsKKyAgICAgICAgYnVmZmVyLT5tX3N0YXRlLmxvY2tlZCA9IHRydWU7CisKKyAgICAgICAgLy8g
U3dhcCBvdXQgdGhlIGxvY2F0ZWQgYnVmZmVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBxdWV1
ZS4gV2hlbiB0aGUgbmV4dCBidWZmZXIgaXMgcmVxdWVzdGVkIGZyb20gdGhpcworICAgICAgICAv
LyBzd2FwY2hhaW4sIHRoZSBwcmV2aW91c2x5LXVzZWQgYnVmZmVycyB3aWxsIGJlIHRyYXZlcnNl
ZCBhbmQgdGVzdGVkIGZvciByZWxlYXNlIGZpcnN0LCBtZWFuaW5nIHRoZXJlJ3MgYQorICAgICAg
ICAvLyBoaWdoZXIgY2hhbmNlIHdlIHdpbGwgYmUgYWJsZSB0byByZXVzZSB0aGVtLCB3aXRob3V0
IHRoZSBwZW5hbHR5IG9mIGhhdmluZyB0byB0cmF2ZXJzZSB0byBkZWVwIGludG8gdGhlCisgICAg
ICAgIC8vIHN3YXBjaGFpbiBhcnJheS4KKyAgICAgICAgZm9yICgrK2k7IGkgPCBtX2FycmF5LnNp
emUgJiYgISFtX2FycmF5Lm9iamVjdFtpXTsgKytpKQorICAgICAgICAgICAgc3RkOjpzd2FwKG1f
YXJyYXkub2JqZWN0W2kgLSAxXSwgbV9hcnJheS5vYmplY3RbaV0pOworCisgICAgICAgIHJldHVy
biBidWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dCTUJ1ZmZlclN3
YXBjaGFpbjo6QnVmZmVyOjpCdWZmZXIodWludDMyX3QgaGFuZGxlLCBjb25zdCBCdWZmZXJEZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCisgICAgOiBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX2Rl
c2NyaXB0aW9uKGRlc2NyaXB0aW9uKQoreworICAgIG1fc3RhdGUucmVsZWFzZUZsYWcgPSBETUFC
dWZSZWxlYXNlRmxhZyhETUFCdWZSZWxlYXNlRmxhZzo6SW5pdGlhbGl6ZSk7Cit9CisKK0dCTUJ1
ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjp+QnVmZmVyKCkgPSBkZWZhdWx0OworCitETUFCdWZPYmpl
Y3QgR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OmNyZWF0ZURNQUJ1Zk9iamVjdCh1aW50cHRy
X3QgaGFuZGxlKSBjb25zdAoreworICAgIERNQUJ1Zk9iamVjdCBvYmplY3QoaGFuZGxlKTsKKyAg
ICBvYmplY3QuZm9ybWF0ID0gbV9kZXNjcmlwdGlvbi5mb3JtYXQ7CisgICAgb2JqZWN0LndpZHRo
ID0gbV9kZXNjcmlwdGlvbi53aWR0aDsKKyAgICBvYmplY3QuaGVpZ2h0ID0gbV9kZXNjcmlwdGlv
bi5oZWlnaHQ7CisgICAgb2JqZWN0LnJlbGVhc2VGbGFnID0gbV9zdGF0ZS5yZWxlYXNlRmxhZy5k
dXAoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9uLmZvcm1h
dC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICBvYmplY3QuZmRbaV0gPSBnYm1fYm9fZ2V0X2Zk
KG1fcGxhbmVzW2ldLmJvKTsKKyAgICAgICAgb2JqZWN0Lm9mZnNldFtpXSA9IDA7CisgICAgICAg
IG9iamVjdC5zdHJpZGVbaV0gPSBtX3BsYW5lc1tpXS5zdHJpZGU7CisgICAgICAgIC8vIFRPRE86
IHRoZXNlIHNob3VsZCBiZSB0aGUgcGxhbmUtc3BlY2lmaWMgbW9kaWZpZXJzLiBXZSBkb24ndCB1
c2UgdGhlbSB5ZXQuCisgICAgICAgIG9iamVjdC5tb2RpZmllcltpXSA9IDA7CisgICAgfQorCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OlBsYW5l
RGF0YTo6flBsYW5lRGF0YSgpCit7CisgICAgaWYgKGJvKQorICAgICAgICBnYm1fYm9fZGVzdHJv
eShibyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jODQyNDEwNmYzYjVjN2Y1ZGQwNTMwNzc1MjFlYjdhZGRhMzAwODQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZl
clN3YXBjaGFpbi5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIK
KyNpbmNsdWRlICJETUFCdWZPYmplY3QuaCIKKyNpbmNsdWRlICJETUFCdWZSZWxlYXNlRmxhZy5o
IgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL05vbm1vdmFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK3N0cnVj
dCBnYm1fYm87CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0JNQnVmZmVyU3dhcGNo
YWluIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdCTUJ1ZmZlclN3YXBjaGFpbj4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIFRoZSBzaXplIHNo
b3VsZCBiZSBhZGp1c3RlZCB0byB0aGUgdXNlLWNhc2UuCisgICAgLy8gRm9yIGN5Y2xpY2FsIHJl
bmRlcmluZyAoZS5nLiBXZWJHTCksIEZvdXIgc2hvdWxkIGJlIGlkZWFsIHNpbmNlIHdlJ2xsIHJl
bHkgb24KKyAgICAvLyBzb21ldGhpbmcgbGlrZSB2c3luYyB0byBtYWludGFpbiBhIGNvbnN0YW50
IGZyYW1lcmF0ZSBhbmQgc3Vic2VxdWVudCBidWZmZXIgY2h1cm4uCisgICAgLy8gVGhlcmUgYXJl
IG90aGVyIHNwb3JhZGljIHByb2R1Y2VycyBsaWtlIHNvZnR3YXJlLWJhc2VkIG1lZGlhIGRlY29k
ZXJzIHRoYXQgd2lsbAorICAgIC8vIGJlIHJlcXVlc3RpbmcgYW5kIGZpbGxpbmcgaW4gYnVmZmVy
cyBpbiBidXJzdHMgYnV0IHN0aWxsIGhhdmUgdGhlbSBkaXNwbGF5ZWQgb24KKyAgICAvLyBhIGN5
Y2xpY2FsIGJhc2lzLiBFaWdodCBzaG91bGQgYmUgZW5vdWdoIHRvIGNvdmVyIHRoYXQuCisgICAg
Ly8gSW4gYW55IGNhc2UsIHRoZSBzd2FwY2hhaW4gd2lsbCBkbyB3aGF0ZXZlciBpdCBjYW4gdG8g
cmV1c2UgcmVsZWFzZWQgYnVmZmVycworICAgIC8vIGFuZCBub3QgdW5uZWNlc3NhcmlseSBzcGF3
biBuZXcgb25lcywgbWVhbmluZyB0aGUgbGltaXQgc2hvdWxkbid0IGJlIHJlYWNoZWQuCisgICAg
Ly8gSWYgaXQgaXMsIGdldEJ1ZmZlcigpIHdpbGwgcmV0dXJuIGEgbnVsbCBvYmplY3QgYW5kIHRo
ZSBwcm9kdWNlciBoYXMgdG8KKyAgICAvLyBoYW5kbGUgdGhhdCBzb21laG93LgorICAgIGVudW0g
Y2xhc3MgQnVmZmVyU3dhcGNoYWluU2l6ZSA6IHVuc2lnbmVkIHsKKyAgICAgICAgRm91ciA9IDQs
CisgICAgICAgIEVpZ2h0ID0gOAorICAgIH07CisKKyAgICBHQk1CdWZmZXJTd2FwY2hhaW4oQnVm
ZmVyU3dhcGNoYWluU2l6ZSk7CisgICAgfkdCTUJ1ZmZlclN3YXBjaGFpbigpOworCisgICAgc3Ry
dWN0IEJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAgICAgICAgRE1BQnVmRm9ybWF0IGZvcm1hdCB7IH07
CisgICAgICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9OworICAgICAgICB1aW50MzJfdCBoZWlnaHQg
IHsgMCB9OworICAgIH07CisKKyAgICBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8QnVmZmVyPiB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IHB1YmxpYzoKKyAgICAgICAgQnVmZmVyKHVpbnQzMl90LCBjb25zdCBCdWZmZXJEZXNjcmlwdGlv
biYpOworICAgICAgICB+QnVmZmVyKCk7CisKKyAgICAgICAgRE1BQnVmT2JqZWN0IGNyZWF0ZURN
QUJ1Zk9iamVjdCh1aW50cHRyX3QpIGNvbnN0OworCisgICAgICAgIHN0cnVjdCBQbGFuZURhdGEg
eworICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhbmVEYXRhKTsKKyAgICAgICAg
ICAgIFdURl9NQUtFX05PTk1PVkFCTEUoUGxhbmVEYXRhKTsKKworICAgICAgICAgICAgUGxhbmVE
YXRhKCkgPSBkZWZhdWx0OworICAgICAgICAgICAgflBsYW5lRGF0YSgpOworCisgICAgICAgICAg
ICBETUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3VyY2MgeyBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6SW52
YWxpZCB9OworICAgICAgICAgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgICAgICAgICB1
aW50MzJfdCBoZWlnaHQgeyAwIH07CisgICAgICAgICAgICB1aW50MzJfdCBzdHJpZGUgeyAwIH07
CisgICAgICAgICAgICBzdHJ1Y3QgZ2JtX2JvKiBibyB7IG51bGxwdHIgfTsKKyAgICAgICAgfTsK
KworICAgICAgICB1aW50MzJfdCBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQor
CisgICAgICAgIHVuc2lnbmVkIG51bVBsYW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRp
b24uZm9ybWF0Lm51bVBsYW5lczsgfQorICAgICAgICBjb25zdCBQbGFuZURhdGEmIHBsYW5lRGF0
YSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcyk7CisgICAgICAgICAgICByZXR1cm4gbV9w
bGFuZXNbaW5kZXhdOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQg
Y2xhc3MgR0JNQnVmZmVyU3dhcGNoYWluOworCisgICAgICAgIHVpbnQzMl90IG1faGFuZGxlIHsg
MCB9OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9vbCBsb2NrZWQgeyBmYWxzZSB9
OworICAgICAgICAgICAgRE1BQnVmUmVsZWFzZUZsYWcgcmVsZWFzZUZsYWc7CisgICAgICAgIH0g
bV9zdGF0ZTsKKworICAgICAgICBCdWZmZXJEZXNjcmlwdGlvbiBtX2Rlc2NyaXB0aW9uOworICAg
ICAgICBzdGQ6OmFycmF5PFBsYW5lRGF0YSwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gbV9w
bGFuZXM7CisgICAgfTsKKworICAgIFJlZlB0cjxCdWZmZXI+IGdldEJ1ZmZlcihjb25zdCBCdWZm
ZXJEZXNjcmlwdGlvbiYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgY19tYXhCdWZmZXJzID0gODsKKworICAgIHVpbnQzMl90IG1faGFuZGxlR2VuZXJhdG9yIHsg
MCB9OworICAgIHN0cnVjdCB7CisgICAgICAgIEJ1ZmZlckRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
OworICAgICAgICB1bnNpZ25lZCBzaXplIHsgMCB9OworICAgICAgICBzdGQ6OmFycmF5PFJlZlB0
cjxCdWZmZXI+LCBjX21heEJ1ZmZlcnM+IG9iamVjdCB7IH07CisgICAgfSBtX2FycmF5OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcAppbmRleCA3MGYyMDQ3NDMxNTk4YTBjYjM4ZTRjNmQzNWM4OGE0MTU1NTli
ZTRhLi5jMTM4NmNhOGU5ZTBkYTY2NmQ3ZWM1N2UxNDE3YThiZDRkYTkwOGJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMTYwLDEyICsxNjAsMTYg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2RtYWJ1Zl92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0
RE1BQnVmVmlkZW9TaW5rQ2xhc3MqIGtsYXMKICAgICAgICAgIlNpbmsgU3RhdGlzdGljcyIsIEdT
VF9UWVBFX1NUUlVDVFVSRSwgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBREFC
TEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwogfQogCi12b2lkIHdlYktpdERNQUJ1ZlZp
ZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRETUFCdWZWaWRlb1NpbmsqIHNpbmss
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorYm9vbCB3ZWJLaXRETUFCdWZW
aWRlb1NpbmtJc0VuYWJsZWQoKQogewotICAgIFdlYktpdERNQUJ1ZlZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBzaW5rLT5wcml2OwotCi0gICAgcHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlID0gcGxh
eWVyOwotICAgIHdlYktpdFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShwcml2LT5hcHBT
aW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOworICAgIHN0YXRpYyBib29sIHNf
ZW5hYmxlZCA9IGZhbHNlOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX2ZsYWc7CisgICAg
c3RkOjpjYWxsX29uY2Uoc19mbGFnLAorICAgICAgICBbJl0geworICAgICAgICAgICAgY29uc3Qg
Y2hhciogdmFsdWUgPSBnX2dldGVudigiV0VCS0lUX0dTVF9ETUFCVUZfU0lOS19FTkFCTEVEIik7
CisgICAgICAgICAgICBzX2VuYWJsZWQgPSB2YWx1ZSAmJiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZSh2YWx1ZSwgInRydWUiKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiMSIpKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuIHNfZW5hYmxlZDsKIH0KIAogYm9vbCB3ZWJLaXRETUFC
dWZWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKQEAgLTE3Myw0ICsxNzcsMTIgQEAgYm9vbCB3ZWJL
aXRETUFCdWZWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKICAgICByZXR1cm4gaXNHU3RyZWFtZXJQ
bHVnaW5BdmFpbGFibGUoImFwcCIpOwogfQogCit2b2lkIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Nl
dE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRETUFCdWZWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIFdlYktpdERNQUJ1ZlZpZGVvU2lu
a1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgcHJpdi0+bWVkaWFQbGF5ZXJQcml2
YXRlID0gcGxheWVyOworICAgIHdlYktpdFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShw
cml2LT5hcHBTaW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOworfQorCiAjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1l
ci5oCmluZGV4IGRmMjRhNmYwZmEzN2QyMzc1NTFlNjgxNjlhY2FhNzlkN2M5OTBmZjIuLjMyOGU4
YjdlYjljMTc3MWM5MGNmODM5ODc2NjE2NDY1ODhiN2I3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1B
QnVmVmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IF9XZWJLaXRE
TUFCdWZWaWRlb1NpbmtDbGFzcyB7CiAKIEdUeXBlIHdlYmtpdF9kbWFidWZfdmlkZW9fc2lua19n
ZXRfdHlwZSh2b2lkKTsKIAorYm9vbCB3ZWJLaXRETUFCdWZWaWRlb1NpbmtJc0VuYWJsZWQoKTsK
IGJvb2wgd2ViS2l0RE1BQnVmVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSgpOwogdm9pZCB3ZWJLaXRE
TUFCdWZWaWRlb1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0RE1BQnVmVmlkZW9TaW5r
KiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggNTc5YTEzMzE0MGZm
ZTc0YmRkMTExYjgwYmNlYmNlNmE3NDBlMjQ0MS4uMmRiMDRlZDkzNTA0ZGRkYjVhY2FhYmU4YTM2
MjhhYzU4Mjg4ZDhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKQEAgLTI4LDYgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFC
dWZPYmplY3QuaCIKKyNpbmNsdWRlICJETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJHQk1CdWZmZXJTd2FwY2hhaW4uaCIKKyNpbmNsdWRlICJHQk1EZXZpY2UuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb01peGVyLmgi
CiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCkBAIC03NSw3ICs4MCw5IEBACiAjaW5jbHVk
ZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxn
Ym0uaD4KICNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2FsbG9jYXRvcnMvZ3N0ZG1h
YnVmLmg+CiAjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogI2luY2x1ZGUgPGdz
dC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KQEAgLTky
LDYgKzk5LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VVJMLmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAKQEAgLTExNCw2ICsxMjIsNyBAQAog
I2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRnJhbWVIb2xkZXIuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWYuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wu
aCIKICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKQEAgLTE1NSwyMyArMTY0LDI5
IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRM
b2FkaW5nUHJvZ3Jlc3MoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9kcmF3VGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBh
aW50KQogICAgICwgbV9yZWFkeVRpbWVySGFuZGxlcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCkKLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBtX25pY29zaWFMYXllcihO
aWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQotI2Vsc2UKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmICFVU0UoTklDT1NJQSkKICAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5
KGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wpKQogI2VuZGlm
Ci0jZW5kaWYKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1fbG9nZ2VyKHBsYXll
ci0+bWVkaWFQbGF5ZXJMb2dnZXIoKSkKICAgICAsIG1fbG9nSWRlbnRpZmllcihwbGF5ZXItPm1l
ZGlhUGxheWVyTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCisgICAgLCBtX3N3YXBjaGFpbihhZG9w
dFJlZihuZXcgR0JNQnVmZmVyU3dhcGNoYWluKEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyU3dh
cGNoYWluU2l6ZTo6RWlnaHQpKSkKIHsKICNpZiBVU0UoR0xJQikKICAgICBtX3JlYWR5VGltZXJI
YW5kbGVyLnNldFByaW9yaXR5KEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKTsKICNlbmRpZgogICAg
IG1faXNQbGF5ZXJTaHV0dGluZ0Rvd24uc3RvcmUoZmFsc2UpOwogCisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6
OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzLAorICAgICAgICBbJl0oKSAtPiBSZWY8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4geworICAgICAgICAgICAgaWYgKHdlYktpdERNQUJ1ZlZp
ZGVvU2lua0lzRW5hYmxlZCgpICYmIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5RE1BQnVmKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTCk7CisgICAgICAgIH0oKSkpOworI2Vu
ZGlmCisKICAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOwogICAgIG1fYXVkaW9TaW5r
ID0gY3JlYXRlQXVkaW9TaW5rKCk7CiAKQEAgLTI4NjYsNyArMjg4MSw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwZXJmb3JtVGFza0F0TWVkaWFUaW1lKEZ1bmN0aW9uPHZv
aWQoKT4mJiB0YXNrCiBQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBt
X25pY29zaWFMYXllci5wdHIoKTsKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CiAj
ZWxzZQogICAgIHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcio+
KHRoaXMpOwogI2VuZGlmCkBAIC0yOTc4LDYgKzI5OTMsMjMxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpCiAgICAgcHJveHlPcGVy
YXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKICNlbmRpZgogfQorCisvLyBHU3RyZWFtZXIn
cyBnc3RfdmlkZW9fZm9ybWF0X3RvX2ZvdXJjYygpIGRvZXNuJ3QgY292ZXIgUkdCLWxpa2UgZm9y
bWF0cywgc28gd2UKKy8vIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIEZvdXJDQyB2YWx1ZXMgZm9y
IHRob3NlIHRocm91Z2ggdGhpcyBmdW5jaW9uLgorc3RhdGljIHVpbnQzMl90IGZvdXJjY1ZhbHVl
KEdzdFZpZGVvRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVm
Rm9ybWF0OjpGb3VyQ0M6OlhCR1I4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdS
eDoKKyAgICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4
OCk7CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6CisgICAgICAgIHJldHVybiB1aW50
MzJfdChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSWDg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVP
X0ZPUk1BVF94QkdSOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6OlJHQlg4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKKyAgICAgICAg
cmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4OCk7CisgICAgY2Fz
ZSBHU1RfVklERU9fRk9STUFUX0JHUkE6CisgICAgICAgIHJldHVybiB1aW50MzJfdChETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdC
OgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkJHUkE4ODg4
KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKKyAgICAgICAgcmV0dXJuIHVpbnQz
Ml90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpSR0JBODg4OCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGdzdF92aWRlb19mb3JtYXRfdG9fZm91cmNj
KGZvcm1hdCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoRE1B
QnVmVG9Db21wb3NpdG9yKCkKK3sKKyAgICBMb2NrZXIgc2FtcGxlTG9ja2VyIHsgbV9zYW1wbGVN
dXRleCB9OworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8qIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxl
LmdldCgpKTsKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFZpZGVv
SW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmdmlkZW9JbmZvKTsKKyAg
ICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1f
c2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX21ldGEoYnVmZmVyKTsKKyAgICBpZiAo
bWV0YSkgeworICAgICAgICBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKSA9IG1ldGEt
PndpZHRoOworICAgICAgICBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbykgPSBtZXRh
LT5oZWlnaHQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1ldGEtPm5fcGxh
bmVzOyArK2kpIHsKKyAgICAgICAgICAgIEdTVF9WSURFT19JTkZPX1BMQU5FX09GRlNFVCgmdmlk
ZW9JbmZvLCBpKSA9IG1ldGEtPm9mZnNldFtpXTsKKyAgICAgICAgICAgIEdTVF9WSURFT19JTkZP
X1BMQU5FX1NUUklERSgmdmlkZW9JbmZvLCBpKSA9IG1ldGEtPnN0cmlkZVtpXTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGF1dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCk7Cisg
ICAgQVNTRVJUKGlzPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KHByb3h5
KSk7CisKKyAgICBhdXRvKiBmZWF0dXJlcyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlcyhjYXBzLCAw
KTsKKyAgICBpZiAoZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMoZmVhdHVyZXMsIEdTVF9DQVBT
X0ZFQVRVUkVfTUVNT1JZX0RNQUJVRikpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBvZiBhIGhhcmR3
YXJlIGRlY29kZXIgdGhhdCdzIHlpZWxkaW5nIGRtYWJ1ZiBtZW1vcnksIHdlIGNhbiB0YWtlIHRo
ZSByZWxldmFudCBkYXRhIGFuZAorICAgICAgICAvLyBwdXNoIGl0IGludG8gdGhlIGNvbXBvc2l0
aW9uIHByb2Nlc3MuCisKKyAgICAgICAgKyttX3NhbXBsZUNvdW50OworICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgcHJveHkubG9jaygpIH07CisgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBQcm92aWRlIHRoZSBETUFCdWZPYmpl
Y3Qgd2l0aCBhIHJlbGV2YW50IGhhbmRsZSAobWVtb3J5IGFkZHJlc3MpLiBXaGVuIHByb3ZpZGVk
IGZvciB0aGUgZmlyc3QgdGltZSwKKyAgICAgICAgLy8gdGhlIGxhbWJkYSB3aWxsIGJlIGludm9r
ZWQgYW5kIGFsbCBkbWFidWYgZGF0YSBpcyBmaWxsZWQgaW4uCisgICAgICAgIGRvd25jYXN0PFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KHByb3h5KS5wdXNoRE1BQnVmKAor
ICAgICAgICAgICAgRE1BQnVmT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihnc3Rf
YnVmZmVyX3BlZWtfbWVtb3J5KGJ1ZmZlciwgMCkpKSwKKyAgICAgICAgICAgIFsmXShhdXRvJiYg
b2JqZWN0KSB7CisgICAgICAgICAgICAgICAgb2JqZWN0LmZvcm1hdCA9IERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlKGZvdXJjY1ZhbHVlKEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKSkpOwor
ICAgICAgICAgICAgICAgIG9iamVjdC53aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRl
b0luZm8pOworICAgICAgICAgICAgICAgIG9iamVjdC5oZWlnaHQgPSBHU1RfVklERU9fSU5GT19I
RUlHSFQoJnZpZGVvSW5mbyk7CisKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiByZWxlYXNlIG1l
Y2hhbmlzbSBmb3IgYSBkZWNvZGVyLXByb3ZpZGVkIGRtYWJ1ZiBpcyBhIGJpdCB0cmlja3kuIFRo
ZSBkbWFidWYgb2JqZWN0CisgICAgICAgICAgICAgICAgLy8gaXRzZWxmIGRvZXNuJ3QgcHJvdmlk
ZSBhbnl0aGluZyB1c2VmdWwsIGJ1dCB0aGUgZGVjb2RlciB3b24ndCByZXVzZSB0aGUgZG1hYnVm
IHVudGlsIHRoZQorICAgICAgICAgICAgICAgIC8vIHJlbGV2YW50IEdzdFNhbXBsZSByZWZlcmVu
Y2UgaXMgZHJvcHBlZCBieSB0aGUgZG93bnN0cmVhbSBwaXBlbGluZS4gU28gZm9yIHRoaXMgdG8g
d29yaywKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIGEgbmVlZCB0byBzb21laG93IGFzc29j
aWF0ZSB0aGUgR3N0U2FtcGxlIHJlZmVyZW5jZSB3aXRoIHRoaXMgcmVsZWFzZSBmbGFnIHNvIHRo
YXQKKyAgICAgICAgICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQgb25jZSB0aGUg
cmVsZWFzZSBmbGFnIGlzIHNpZ25hbGxlZC4gVGhlcmUncyB3YXlzIHRvIGFjaGlldmUgdGhhdCwK
KyAgICAgICAgICAgICAgICAvLyBidXQgbGVmdCBmb3IgbGF0ZXIuCisgICAgICAgICAgICAgICAg
b2JqZWN0LnJlbGVhc2VGbGFnID0gRE1BQnVmUmVsZWFzZUZsYWcgeyB9OworCisgICAgICAgICAg
ICAgICAgLy8gRm9yIGVhY2ggcGxhbmUsIHRoZSByZWxldmFudCBkYXRhIChzdHJpZGUsIG9mZnNl
dCwgc2tpcCwgZG1hYnVmIGZkKSBpcyByZXRyaWV2ZWQgYW5kIGFzc2lnbmVkCisgICAgICAgICAg
ICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuIE1vZGlmaWVyIHZhbHVlcyBhcmUgemVyb2VkIG91dCBm
b3Igbm93LCBzaW5jZSBHU3RyZWFtZXIgZG9lc24ndCB5ZXQgcHJvdmlkZQorICAgICAgICAgICAg
ICAgIC8vIHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBnc2l6ZSBvZmZzZXQgPSBHU1RfVklERU9fSU5GT19QTEFORV9PRkZTRVQoJnZpZGVvSW5m
bywgaSk7CisgICAgICAgICAgICAgICAgICAgIGd1aW50IG1lbWlkID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ3NpemUgc2tp
cCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5KGJ1
ZmZlciwgb2Zmc2V0LCAxLCAmbWVtaWQsICZsZW5ndGgsICZza2lwKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIG1l
bWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mZFtpXSA9IGR1cENsb3NlT25F
eGVjKGdzdF9kbWFidWZfbWVtb3J5X2dldF9mZChtZW0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IG1lbS0+b2Zmc2V0ICsgc2tpcDsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmRbaV0gPSAtMTsKKworICAgICAg
ICAgICAgICAgICAgICBnaW50IGNvbXBbR1NUX1ZJREVPX01BWF9DT01QT05FTlRTXTsKKyAgICAg
ICAgICAgICAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9pbmZvX2NvbXBvbmVudCh2aWRlb0luZm8u
ZmluZm8sIGksIGNvbXApOworICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2Zmc2V0W2ldID0g
b2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RyaWRlW2ldID0gR1NUX1ZJREVP
X0lORk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8sIGkpOworICAgICAgICAgICAgICAgICAgICBv
YmplY3QubW9kaWZpZXJbaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBJZiB0aGUgZGVjb2RlciBpcyBleHBvcnRpbmcgcmF3IG1lbW9yeSwgd2UgaGF2
ZSB0byB1c2UgdGhlIHN3YXBjaGFpbiB0byBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBidWZmZXJzCisg
ICAgLy8gYW5kIGNvcHkgb3ZlciB0aGUgZGF0YSBmb3IgZWFjaCBwbGFuZS4KKyAgICBHQk1CdWZm
ZXJTd2FwY2hhaW46OkJ1ZmZlckRlc2NyaXB0aW9uIGJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAgICAg
ICAgRE1BQnVmRm9ybWF0OjpjcmVhdGUoZm91cmNjVmFsdWUoR1NUX1ZJREVPX0lORk9fRk9STUFU
KCZ2aWRlb0luZm8pKSksCisgICAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8p
LCBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyksCisgICAgfTsKKyAgICBpZiAoYnVm
ZmVyRGVzY3JpcHRpb24uZm9ybWF0LmZvdXJjYyA9PSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6SW52
YWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzd2FwY2hhaW5CdWZmZXIgPSBtX3N3
YXBjaGFpbi0+Z2V0QnVmZmVyKGJ1ZmZlckRlc2NyaXB0aW9uKTsKKworICAgIC8vIFNvdXJjZSBo
ZWxwZXIgc3RydWN0LCBtYXBzIHRoZSByYXcgbWVtb3J5IGFuZCBleHBvc2VzIHRoZSBtYXBwZWQg
ZGF0YSBmb3IgY29weWluZy4KKyAgICBzdHJ1Y3QgU291cmNlIHsKKyAgICAgICAgU291cmNlKEdz
dE1lbW9yeSogbWVtb3J5LCBnc2l6ZSBvZmZzZXQsIHVpbnQzMl90IHN0cmlkZSwgdWludDMyX3Qg
aGVpZ2h0KQorICAgICAgICAgICAgOiBtZW1vcnkobWVtb3J5KQorICAgICAgICAgICAgLCBzdHJp
ZGUoc3RyaWRlKQorICAgICAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIWdzdF9tZW1vcnlfbWFwKG1lbW9yeSwgJm1hcEluZm8sIEdTVF9NQVBfUkVB
RCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB2YWxpZCA9IHRydWU7
CisgICAgICAgICAgICBkYXRhID0gJm1hcEluZm8uZGF0YVtvZmZzZXRdOworICAgICAgICB9CisK
KyAgICAgICAgflNvdXJjZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAg
ICAgICAgICAgICAgICBnc3RfbWVtb3J5X3VubWFwKG1lbW9yeSwgJm1hcEluZm8pOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCB2YWxpZCB7IGZhbHNlIH07CisgICAgICAgIEdzdE1lbW9yeSog
bWVtb3J5IHsgbnVsbHB0ciB9OworICAgICAgICBHc3RNYXBJbmZvIG1hcEluZm87CisgICAgICAg
IHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAgIHVpbnQzMl90IHN0cmlkZSB7IDAg
fTsKKyAgICAgICAgdWludDMyX3QgaGVpZ2h0IHsgMCB9OworICAgIH07CisKKyAgICAvLyBEZXN0
aW5hdGlvbiBoZWxwZXIgc3RydWN0LCBtYXBzIHRoZSBnYm1fYm8gb2JqZWN0IGludG8gQ1BVLW1l
bW9yeSBzcGFjZSBhbmQgY29waWVzIGZyb20gdGhlIGFjY29tcGFueWluZyBTb3VyY2UgaW4gZmls
bCgpLgorICAgIHN0cnVjdCBEZXN0aW5hdGlvbiB7CisgICAgICAgIERlc3RpbmF0aW9uKHN0cnVj
dCBnYm1fYm8qIGJvLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQorICAgICAgICAg
ICAgOiBibyhibykKKyAgICAgICAgeworICAgICAgICAgICAgbWFwID0gZ2JtX2JvX21hcChibywg
MCwgMCwgd2lkdGgsIGhlaWdodCwgR0JNX0JPX1RSQU5TRkVSX1dSSVRFLCAmc3RyaWRlLCAmbWFw
RGF0YSk7CisgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIGRhdGEgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihtYXApOworICAgICAgICB9CisKKyAgICAgICAgfkRlc3RpbmF0aW9u
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgICAgIGdi
bV9ib191bm1hcChibywgbWFwRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbGwo
Y29uc3QgU291cmNlJiBzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodWludDMy
X3QgeSA9IDA7IHkgPCBzb3VyY2UuaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgICAgICAgICBhdXRv
KiBzb3VyY2VEYXRhID0gJnNvdXJjZS5kYXRhW3kgKiBzb3VyY2Uuc3RyaWRlXTsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbkRhdGEgPSAmZGF0YVt5ICogc3RyaWRlXTsKKyAgICAg
ICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25EYXRhLCBzb3VyY2VEYXRhLCBzdGQ6Om1pbihz
b3VyY2Uuc3RyaWRlLCBzdHJpZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdmFsaWQgeyBmYWxzZSB9OworICAgICAgICBzdHJ1Y3QgZ2JtX2JvKiBibyB7IG51
bGxwdHIgfTsKKyAgICAgICAgdm9pZCogbWFwIHsgbnVsbHB0ciB9OworICAgICAgICB2b2lkKiBt
YXBEYXRhIHsgbnVsbHB0ciB9OworICAgICAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9Owor
ICAgICAgICB1aW50MzJfdCBzdHJpZGUgeyAwIH07CisgICAgfTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmdmlkZW9JbmZvKTsgKytpKSB7
CisgICAgICAgIGdpbnQgY29tcFtHU1RfVklERU9fTUFYX0NPTVBPTkVOVFNdOworICAgICAgICBn
c3RfdmlkZW9fZm9ybWF0X2luZm9fY29tcG9uZW50KHZpZGVvSW5mby5maW5mbywgaSwgY29tcCk7
CisKKyAgICAgICAgYXV0byYgcGxhbmVEYXRhID0gc3dhcGNoYWluQnVmZmVyLT5wbGFuZURhdGEo
aSk7CisgICAgICAgIGdzaXplIG9mZnNldCA9IEdTVF9WSURFT19JTkZPX1BMQU5FX09GRlNFVCgm
dmlkZW9JbmZvLCBpKTsKKyAgICAgICAgZ3VpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExB
TkVfU1RSSURFKCZ2aWRlb0luZm8sIGkpOworCisgICAgICAgIGd1aW50IG1lbWlkLCBsZW5ndGg7
CisgICAgICAgIGdzaXplIHNraXA7CisgICAgICAgIGlmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5
KGJ1ZmZlciwgb2Zmc2V0LCAxLCAmbWVtaWQsICZsZW5ndGgsICZza2lwKSkgeworICAgICAgICAg
ICAgYXV0byogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIG1lbWlkKTsKKwor
ICAgICAgICAgICAgU291cmNlIHNvdXJjZShtZW0sIG9mZnNldCwgc3RyaWRlLCBwbGFuZURhdGEu
aGVpZ2h0KTsKKyAgICAgICAgICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKHBsYW5lRGF0YS5i
bywgcGxhbmVEYXRhLndpZHRoLCBwbGFuZURhdGEuaGVpZ2h0KTsKKworICAgICAgICAgICAgaWYg
KHNvdXJjZS52YWxpZCAmJiBkZXN0aW5hdGlvbi52YWxpZCkKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbi5maWxsKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICArK21fc2FtcGxl
Q291bnQ7CisgICAgTG9ja2VyIGxvY2tlciB7IHByb3h5LmxvY2soKSB9OworICAgIGlmICghcHJv
eHkuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHVwZGF0ZWQgYnVm
ZmVyIGlzIHB1c2hlZCBpbnRvIHRoZSBjb21wb3NpdGlvbiBzdGFnZS4gVGhlIERNQUJ1Zk9iamVj
dCBoYW5kbGUgdXNlcyB0aGUgc3dhcGNoYWluIGFkZHJlc3MgYXMgdGhlIGhhbmRsZSBiYXNlLgor
ICAgIC8vIFdoZW4gdGhlIGJ1ZmZlciBpcyBwdXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUg
bGFtYmRhIHdpbGwgYmUgaW52b2tlZCB0byByZXRyaWV2ZSBhIG1vcmUgY29tcGxldGUgRE1BQnVm
T2JqZWN0IGZvciB0aGUKKyAgICAvLyBnaXZlbiBHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlciBv
YmplY3QuCisgICAgZG93bmNhc3Q8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1
Zj4ocHJveHkpLnB1c2hETUFCdWYoCisgICAgICAgIERNQUJ1Zk9iamVjdChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obV9zd2FwY2hhaW4uZ2V0KCkpICsgc3dhcGNoYWluQnVmZmVyLT5oYW5k
bGUoKSksCisgICAgICAgIFsmXShhdXRvJiYgb2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4g
c3dhcGNoYWluQnVmZmVyLT5jcmVhdGVETUFCdWZPYmplY3Qob2JqZWN0LmhhbmRsZSk7CisgICAg
ICAgIH0pOworfQogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQoKQpAQCAtMzE4NCw4ICszNDI0LDE2IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RTYW1w
bGUqIHNhbXBsZSkKICNlbmRpZgogICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKICAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQobV9kcmF3TG9jayk7Ci0gICAgfSBlbHNl
CisgICAgfSBlbHNlIHsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgaWYgKGlzPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKSkg
eworICAgICAgICAgICAgcHVzaERNQUJ1ZlRvQ29tcG9zaXRvcigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBwdXNoVGV4dHVyZVRvQ29tcG9zaXRv
cigpOworICAgIH0KICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiB9CiAKQEAgLTM0
MjUsNiArMzY3MywyMSBAQCBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUoKSBjb25zdAogICAgIHJldHVybiBNZWRpYVBs
YXllcjo6TW92aWVMb2FkVHlwZTo6RG93bmxvYWQ7CiB9CiAKK0dzdEVsZW1lbnQqIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rRE1BQnVmKCkKK3sKKyAgICBpZiAo
IXdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBpZiAoIXdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKSkgeworICAg
ICAgICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIHRoZSBETUFCdWYgdmlk
ZW8gc2luayBkZXBlbmRlbmNpZXMuIEhhcmR3YXJlLWFjY2VsZXJhdGVkIHplcm8tY29weSB2aWRl
byByZW5kZXJpbmcgd29uJ3QgYmUgYWNoaWV2YWJsZSB3aXRoIHRoaXMgcGx1Z2luLiIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBzaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJraXRkbWFidWZ2aWRlb3NpbmsiLCBudWxscHRyKTsK
KyAgICBBU1NFUlQoc2luayk7CisgICAgd2ViS2l0RE1BQnVmVmlkZW9TaW5rU2V0TWVkaWFQbGF5
ZXJQcml2YXRlKFdFQktJVF9ETUFCVUZfVklERU9fU0lOSyhzaW5rKSwgdGhpcyk7CisgICAgcmV0
dXJuIHNpbms7Cit9CisKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQogR3N0RWxlbWVudCogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmtHTCgpCiB7CkBAIC0zNTE2LDgg
KzM3NzksMTAgQEAgR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVWaWRlb1NpbmsoKQogICAgIHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsKICNlbmRpZgogCisg
ICAgaWYgKCFtX3ZpZGVvU2luayAmJiBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpCisgICAg
ICAgIG1fdmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5rRE1BQnVmKCk7CiAjaWYgVVNFKEdTVFJF
QU1FUl9HTCkKLSAgICBpZiAobV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQorICAgIGlmICgh
bV92aWRlb1NpbmsgJiYgbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQogICAgICAgICBtX3Zp
ZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGUzODA3NWIyZmMyNmQ5NDNiZjlh
MDA2NTQzM2M3YmJhYWU1ZTA2MjMuLjY0ZjA1OWNkZDFhZjI2NGZmNDZkNmMwMDliOGFjYmY2NWMz
MWViZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
QEAgLTEwNSw2ICsxMDUsOCBAQCBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OwogY2xhc3MgTWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2s7
CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjsKIAorY2xhc3MgR0JNQnVmZmVyU3dh
cGNoYWluOworCiB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKIAogLy8g
VXNlIGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2Ug
Y29uc3RydWN0IFdlYWtQdHJzIG9uIGFub3RoZXIgdGhyZWFkLgpAQCAtMjY3LDEyICsyNjksMTQg
QEAgcHJvdGVjdGVkOgogICAgIGJvb2wgc2hvdWxkSWdub3JlSW50cmluc2ljU2l6ZSgpIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9T
aW5rRE1BQnVmKCk7CiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBHc3RFbGVtZW50KiBjcmVh
dGVWaWRlb1NpbmtHTCgpOwogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAg
ICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOworICAgIHZvaWQgcHVzaERNQUJ1ZlRv
Q29tcG9zaXRvcigpOwogI2lmIFVTRShOSUNPU0lBKQogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5l
ZWRlZCgpIGZpbmFsOwogI2Vsc2UKQEAgLTUwOCw3ICs1MTIsNyBAQCBwcml2YXRlOgogICAgIFJ1
bkxvb3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9yZWFkeVRpbWVySGFu
ZGxlcjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaWYgVVNFKE5JQ09TSUEpCi0gICAg
UmVmPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CiAjZWxzZQogICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNl
bmRpZgpAQCAtNTczLDYgKzU3Nyw4IEBAIHByaXZhdGU6CiAgICAgUmVmPGNvbnN0IExvZ2dlcj4g
bV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOwogI2VuZGlmCisKKyAg
ICBSZWZQdHI8R0JNQnVmZmVyU3dhcGNoYWluPiBtX3N3YXBjaGFpbjsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGwuY3BwCmluZGV4IDAyMjg0NGIzMjY3MDQ1M2M2Y2M3NzU1NDRjMjk2YjVkNjA4
M2M0ZTkuLmQwMWE3OGRlMzg3OTcwMTQwNzFlZjIyYzM5NGI0YzkyMGM5Nzc3MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsLmNwcApAQCAtMzEsMTUgKzMxLDIxIEBACiAKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCiAKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVm
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMLmgiCiAKIG5h
bWVzcGFjZSBOaWNvc2lhIHsKIAogYXV0byBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6
Y3JlYXRlRmFjdG9yeShDbGllbnQmIGNsaWVudCkgLT4gRmFjdG9yeQoreworICAgIHJldHVybiBj
cmVhdGVGYWN0b3J5KGNsaWVudCwgYWRvcHRSZWYoKm5ldyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5R0wpKTsKK30KKworYXV0byBDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbDo6Y3JlYXRlRmFjdG9yeShDbGllbnQmIGNsaWVudCwgUmVmPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+JiYgcHJveHkpIC0+IEZhY3RvcnkKIHsKICAgICBy
ZXR1cm4gRmFjdG9yeSgKLSAgICAgICAgWyZjbGllbnRdKENvbnRlbnRMYXllciYpIHsKLSAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihj
bGllbnQsIGFkb3B0UmVmKCpuZXcgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eUdMKSk7CisgICAgICAgIFsmY2xpZW50LCAmcHJveHldKENvbnRlbnRMYXllciYpIHsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihjbGllbnQsIFdURk1vdmUocHJveHkpKTsKICAgICAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmgKaW5kZXggOTdlMzA1OTEzY2M4NDI2YjM3YjgzN2M0ZDNlNjlkYTdlM2IzMDc2Yi4uNTkz
Njk3NTAyNWJkYjg0MmM0OWJkMzc3ZDMzMGI5NjEwYjQyYTI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
LmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBzdGF0aWMgRmFjdG9y
eSBjcmVhdGVGYWN0b3J5KENsaWVudCYpOworICAgIHN0YXRpYyBGYWN0b3J5IGNyZWF0ZUZhY3Rv
cnkoQ2xpZW50JiwgUmVmPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
JiYpOwogCiAgICAgZXhwbGljaXQgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwoQ2xpZW50
JiwgUmVmPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+JiYpOwogICAg
IHZpcnR1YWwgfkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1Zi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDhiYWY4OGE0NDI2M2YzNTc3NTExZTM5MWRhOTgwMWJlZjE0YzA0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcApAQCAtMCwwICsxLDI4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmgiCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXku
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0xIZWFkZXJzLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSA8
ZmNudGwuaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5RUdMLmgiCisjZWxzZQorI2lu
Y2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUEZORUdMQ1JFQVRFSU1BR0VLSFJQUk9DIGNyZWF0
ZUltYWdlS0hSKCkKK3sKKyAgICBzdGF0aWMgUEZORUdMQ1JFQVRFSU1BR0VLSFJQUk9DIHNfY3Jl
YXRlSW1hZ2VLSFI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHNfZmxhZzsKKyAgICBzdGQ6
OmNhbGxfb25jZShzX2ZsYWcsCisgICAgICAgIFsmXSB7CisgICAgICAgICAgICBzX2NyZWF0ZUlt
YWdlS0hSID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0M+KGVnbEdl
dFByb2NBZGRyZXNzKCJlZ2xDcmVhdGVJbWFnZUtIUiIpKTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuIHNfY3JlYXRlSW1hZ2VLSFI7Cit9CisKK3N0YXRpYyBQRk5FR0xERVNUUk9ZSU1BR0VLSFJQ
Uk9DIGRlc3Ryb3lJbWFnZUtIUigpCit7CisgICAgc3RhdGljIFBGTkVHTERFU1RST1lJTUFHRUtI
UlBST0Mgc19kZXN0cm95SW1hZ2VLSFI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHNfZmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzX2ZsYWcsCisgICAgICAgIFsmXSB7CisgICAgICAgICAg
ICBzX2Rlc3Ryb3lJbWFnZUtIUiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZORUdMREVTVFJPWUlNQUdF
S0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImVnbERlc3Ryb3lJbWFnZUtIUiIpKTsKKyAgICAg
ICAgfSk7CisgICAgcmV0dXJuIHNfZGVzdHJveUltYWdlS0hSOworfQorCitzdHJ1Y3QgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdlRGF0
YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgfkVHTEltYWdl
RGF0YSgpCisgICAgeworICAgICAgICBpZiAobnVtSW1hZ2VzKSB7CisgICAgICAgICAgICBnbERl
bGV0ZVRleHR1cmVzKG51bUltYWdlcywgdGV4dHVyZS5kYXRhKCkpOworCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSW1hZ2VzOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaW1hZ2VbaV0gIT0gRUdMX05PX0lNQUdFX0tIUikKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdHJveUltYWdlS0hSKCkoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9z
aXRpbmcoKS5lZ2xEaXNwbGF5KCksIGltYWdlW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9OworICAgIHVpbnQzMl90IGhlaWdo
dCB7IDAgfTsKKyAgICB1bnNpZ25lZCBudW1JbWFnZXMgeyAwIH07CisgICAgc3RkOjphcnJheTxH
THVpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHRleHR1cmUgeyAwLCAwLCAwLCAwIH07
CisgICAgc3RkOjphcnJheTxFR0xJbWFnZUtIUiwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4g
aW1hZ2UgeyBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1BR0Vf
S0hSLCBFR0xfTk9fSU1BR0VfS0hSIH07Cit9OworCitUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmKCkgPSBk
ZWZhdWx0OworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6flRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhy
ZWFkKENvbXBvc2l0b3IqIGNvbXBvc2l0b3IsIFRleHR1cmVNYXBwZXJMYXllciogdGFyZ2V0TGF5
ZXIpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkKQorICAg
ICAgICBtX2NvbXBvc2l0b3JUaHJlYWQgPSAmVGhyZWFkOjpjdXJyZW50KCk7CisjZW5kaWYKKyAg
ICBBU1NFUlQobV9jb21wb3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNvbXBvc2l0b3IpOworICAgIEFTU0VSVCh0YXJnZXRMYXllcik7CisKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgbV9jb21wb3NpdG9yID0g
Y29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOworICAgIH0K
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjppbnZhbGlk
YXRlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisKKyAgICBtX3BlbmRpbmdM
YXllciA9IG51bGxwdHI7CisgICAgbV9jb21taXR0ZWRMYXllciA9IG51bGxwdHI7CisgICAgbV9s
YXllcnMgPSB7IH07CisKKyAgICBtX2NvbXBvc2l0b3IgPSBudWxscHRyOworICAgIG1fdGFyZ2V0
TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWY6OnN3YXBCdWZmZXIoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsK
KyAgICBpZiAoIW1fdGFyZ2V0TGF5ZXIgfHwgIW1fcGVuZGluZ0xheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHByZXZpb3VzTGF5ZXIgPSBXVEZNb3ZlKG1fY29tbWl0dGVkTGF5ZXIp
OworICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBXVEZNb3ZlKG1fcGVuZGluZ0xheWVyKTsKKyAgICBt
X3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY29tbWl0dGVkTGF5ZXIuZ2V0KCkpOwor
CisgICAgLy8gVGhlIHByZXZpb3VzIGFuZCBqdXN0LWNvbW1pdHRlZCBsYXllcnMgc2hvdWxkbid0
IGJlIHRoZSBzYW1lLiBCdXQgaWYgdGhleSBhcmUsIGRvbid0IHBlcmZvcm0gYSByZWxlYXNlLgor
ICAgIEFTU0VSVCghcHJldmlvdXNMYXllciB8fCBwcmV2aW91c0xheWVyICE9IG1fY29tbWl0dGVk
TGF5ZXIpOworICAgIGlmIChwcmV2aW91c0xheWVyICYmIHByZXZpb3VzTGF5ZXIgIT0gbV9jb21t
aXR0ZWRMYXllcikKKyAgICAgICAgcHJldmlvdXNMYXllci0+cmVsZWFzZSgpOworCisgICAgaWYg
KCFtX2NvbW1pdHRlZExheWVyLT5tX2ltYWdlRGF0YSkKKyAgICAgICAgbV9jb21taXR0ZWRMYXll
ci0+bV9pbWFnZURhdGEgPSBETUFCdWZMYXllcjo6Y3JlYXRlRUdMSW1hZ2VEYXRhKG1fY29tbWl0
dGVkTGF5ZXItPm1fb2JqZWN0KTsKKyAgICBtX2NvbW1pdHRlZExheWVyLT5tX2FnZSA9IDA7CisK
KyAgICAvLyBSZW1vdmUgYW55IHN0YWxlIGxheWVycywgZS5nLiBpZiBhIGxheWVyIGhhcyBnb25l
IHVudXNlZCBmb3IgPmNfbWF4aW11bUFnZSBzd2FwcyBvciBkb2Vzbid0IG1hdGNoIHRoZSBsYXRl
c3Qgc2l6ZS4KKyAgICBhdXRvJiBjb21taXR0ZWRPYmplY3QgPSBtX2NvbW1pdHRlZExheWVyLT5t
X29iamVjdDsKKyAgICBhdXRvIGlzU3RhbGVMYXllciA9CisgICAgICAgIFsmXShhdXRvJiBpdCkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgbGF5ZXIgPSBpdC52YWx1ZS5nZXQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBsYXllci5tX2FnZSA+IERNQUJ1ZkxheWVyOjpjX21heGltdW1BZ2UK
KyAgICAgICAgICAgICAgICB8fCAhKGxheWVyLm1fb2JqZWN0LndpZHRoID09IGNvbW1pdHRlZE9i
amVjdC53aWR0aCAmJiBsYXllci5tX29iamVjdC5oZWlnaHQgPT0gY29tbWl0dGVkT2JqZWN0Lmhl
aWdodCk7CisgICAgICAgIH07CisKKyAgICBib29sIGhhc1N0YWxlTGF5ZXJzID0gZmFsc2U7Cisg
ICAgZm9yIChhdXRvIGl0ID0gbV9sYXllcnMuYmVnaW4oKTsgaXQgIT0gbV9sYXllcnMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgKytpdC0+dmFsdWUtPm1fYWdlOworICAgICAgICBoYXNTdGFsZUxh
eWVycyB8PSBpc1N0YWxlTGF5ZXIoKml0KTsKKyAgICB9CisKKyAgICBpZiAoaGFzU3RhbGVMYXll
cnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92ZUlmKGlzU3RhbGVMYXllcik7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6cHVzaERNQUJ1ZihSZWY8RE1B
QnVmTGF5ZXI+JiYgZG1hYnVmTGF5ZXIpCit7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7
CisKKyAgICAvLyBUaGUgcGVuZGluZyBhbmQganVzdC1wdXNoZWQgbGF5ZXJzIHNob3VsZG4ndCBi
ZSB0aGUgc2FtZS4gQnV0IGlmIHRoZXkgYXJlLCBkb24ndCBwZXJmb3JtIGEgcmVsZWFzZS4KKyAg
ICBBU1NFUlQoIW1fcGVuZGluZ0xheWVyIHx8IG1fcGVuZGluZ0xheWVyICE9IGRtYWJ1ZkxheWVy
LnB0cigpKTsKKyAgICBpZiAobV9wZW5kaW5nTGF5ZXIgJiYgbV9wZW5kaW5nTGF5ZXIgIT0gZG1h
YnVmTGF5ZXIucHRyKCkpCisgICAgICAgIG1fcGVuZGluZ0xheWVyLT5yZWxlYXNlKCk7CisKKyAg
ICBtX3BlbmRpbmdMYXllciA9IFdURk1vdmUoZG1hYnVmTGF5ZXIpOworICAgIGlmIChtX2NvbXBv
c2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvci0+b25OZXdCdWZmZXJBdmFpbGFibGUoKTsKK30K
KworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkRN
QUJ1ZkxheWVyKERNQUJ1Zk9iamVjdCYmIG9iamVjdCwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBm
bGFncykKKyAgICA6IG1fb2JqZWN0KFdURk1vdmUob2JqZWN0KSkKKyAgICAsIG1fZmxhZ3MoZmxh
Z3MpCit7IH0KKworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVm
TGF5ZXI6On5ETUFCdWZMYXllcigpID0gZGVmYXVsdDsKKwordm9pZCBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFj
aXR5KQoreworICAgIGlmICghbV9pbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRPRE86IHRoaXMgaXMgdGhlIEJULjYwMSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gbWF0cml4LiBU
aGUgZXhhY3QgZGVzaXJlZCBjb2xvcnNwYWNlIHNob3VsZCBiZSBpbmNsdWRlZAorICAgIC8vIGlu
IHRoZSBETUFCdWZPYmplY3QsIGFuZCB0aGUgcmVsZXZhbnQgbWF0cml4IGRlY2lkZWQgYmFzZWQg
b24gaXQuIEJULjYwMSBzaG91bGQgcmVtYWluIHRoZSBkZWZhdWx0LgorICAgIHN0YXRpYyBjb25z
dGV4cHIgc3RkOjphcnJheTxHTGZsb2F0LCA5PiBzX3l1dlRvUkdCIHsKKyAgICAgICAgMS4xNjRm
LCAgMC4wZiwgICAgMS41OTZmLAorICAgICAgICAxLjE2NGYsIC0wLjM5MWYsIC0wLjgxM2YsCisg
ICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAuMGYKKyAgICB9OworCisgICAgVGV4dHVyZU1hcHBl
ckdMJiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBw
ZXIpOworICAgIGF1dG8mIGRhdGEgPSAqbV9pbWFnZURhdGE7CisKKyAgICBzd2l0Y2ggKG1fb2Jq
ZWN0LmZvcm1hdC5mb3VyY2MpIHsKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdC
ODg4ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdSODg4ODoKKyAgICBjYXNl
IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpBQkdSODg4ODoKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmUoZGF0YS50ZXh0
dXJlWzBdLCBtX2ZsYWdzLCBJbnRTaXplKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFyZ2V0
UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6STQyMDoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91
ckNDOjpZNDQ0OgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MUI6CisgICAgY2Fz
ZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQyQjoKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1
cmVQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQsIDM+IHsgZGF0YS50ZXh0dXJlWzBdLCBkYXRh
LnRleHR1cmVbMV0sIGRhdGEudGV4dHVyZVsyXSB9LAorICAgICAgICAgICAgc195dXZUb1JHQiwg
bV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1v
ZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVYxMjoKKyAgICAgICAgdGV4bWFwR0wuZHJh
d1RleHR1cmVQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQsIDM+IHsgZGF0YS50ZXh0dXJlWzBd
LCBkYXRhLnRleHR1cmVbMl0sIGRhdGEudGV4dHVyZVsxXSB9LAorICAgICAgICAgICAgc195dXZU
b1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJl
Y3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QTQyMDoKKyAgICAgICAgdGV4bWFw
R0wuZHJhd1RleHR1cmVQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQsIDM+IHsgZGF0YS50ZXh0
dXJlWzBdLCBkYXRhLnRleHR1cmVbMV0sIGRhdGEudGV4dHVyZVsyXSB9LAorICAgICAgICAgICAg
c195dXZUb1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgZGF0YS50ZXh0dXJlWzNdKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYxMjoKKyAgICBj
YXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxOgorICAgICAgICB0ZXhtYXBHTC5kcmF3VGV4
dHVyZVNlbWlQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQsIDI+IHsgZGF0YS50ZXh0dXJlWzBd
LCBkYXRhLnRleHR1cmVbMV0gfSwKKyAgICAgICAgICAgIChtX29iamVjdC5mb3JtYXQuZm91cmNj
ID09IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxKSwKKyAgICAgICAgICAgIHNfeXV2VG9SR0Is
IG1fZmxhZ3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBt
b2RlbFZpZXdNYXRyaXgsIG9wYWNpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpZVVkyOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlVZ
Vlk6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6VlVZQToKKyAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpZVllVOgorICAgICAgICB0ZXhtYXBHTC5kcmF3VGV4dHVyZVBhY2tl
ZFlVVihkYXRhLnRleHR1cmVbMF0sCisgICAgICAgICAgICBzX3l1dlRvUkdCLCBtX2ZsYWdzLCBJ
bnRTaXplKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBvcGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdlRGF0YT4gVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YShE
TUFCdWZPYmplY3QmIG9iamVjdCkKK3sKKyAgICB1c2luZyBFR0xJbWFnZURhdGEgPSBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRh
OworCisgICAgRUdMRGlzcGxheSBlZ2xEaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWRE
aXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5lZ2xEaXNwbGF5KCk7CisKKyAgICBFR0xJbWFnZUtIUiBp
bWFnZVtETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8RUdMaW50PiBhdHRyaWJ1dGVzIHsKKyAgICAgICAgICAgIEVHTF9XSURUSCwg
RUdMaW50KG9iamVjdC5mb3JtYXQucGxhbmVXaWR0aChpLCBvYmplY3Qud2lkdGgpKSwKKyAgICAg
ICAgICAgIEVHTF9IRUlHSFQsIEVHTGludChvYmplY3QuZm9ybWF0LnBsYW5lSGVpZ2h0KGksIG9i
amVjdC5oZWlnaHQpKSwKKyAgICAgICAgICAgIEVHTF9MSU5VWF9EUk1fRk9VUkNDX0VYVCwgRUdM
aW50KG9iamVjdC5mb3JtYXQucGxhbmVzW2ldLmZvdXJjYyksCisgICAgICAgICAgICBFR0xfRE1B
X0JVRl9QTEFORTBfRkRfRVhULCBvYmplY3QuZmRbaV0sCisgICAgICAgICAgICBFR0xfRE1BX0JV
Rl9QTEFORTBfT0ZGU0VUX0VYVCwgRUdMaW50KG9iamVjdC5vZmZzZXRbaV0pLAorICAgICAgICAg
ICAgRUdMX0RNQV9CVUZfUExBTkUwX1BJVENIX0VYVCwgRUdMaW50KG9iamVjdC5zdHJpZGVbaV0p
LAorICAgICAgICAgICAgRUdMX05PTkUsCisgICAgICAgIH07CisgICAgICAgIGltYWdlW2ldID0g
Y3JlYXRlSW1hZ2VLSFIoKShlZ2xEaXNwbGF5LCBFR0xfTk9fQ09OVEVYVCwgRUdMX0xJTlVYX0RN
QV9CVUZfRVhULCBudWxscHRyLCBzdGQ6OmRhdGEoYXR0cmlidXRlcykpOworICAgIH0KKworICAg
IGF1dG8gaW1hZ2VEYXRhID0gbWFrZVVuaXF1ZTxFR0xJbWFnZURhdGE+KCk7CisgICAgYXV0byYg
ZGF0YSA9ICppbWFnZURhdGE7CisgICAgZGF0YS53aWR0aCA9IG9iamVjdC53aWR0aDsKKyAgICBk
YXRhLmhlaWdodCA9IG9iamVjdC5oZWlnaHQ7CisgICAgZGF0YS5udW1JbWFnZXMgPSBvYmplY3Qu
Zm9ybWF0Lm51bVBsYW5lczsKKyAgICBnbEdlblRleHR1cmVzKGRhdGEubnVtSW1hZ2VzLCBkYXRh
LnRleHR1cmUuZGF0YSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5udW1J
bWFnZXM7ICsraSkgeworICAgICAgICBkYXRhLmltYWdlW2ldID0gaW1hZ2VbaV07CisKKyAgICAg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBkYXRhLnRleHR1cmVbaV0pOworICAgICAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
ICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOworICAgICAgICBnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTKEdMX1RF
WFRVUkVfMkQsIGRhdGEuaW1hZ2VbaV0pOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOworICAgIH0KKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4YzBiZGFjYTZkMmRiZTEwOTUxZWNlODNkZTc2NWMwYTczMmE5ZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oCkBAIC0wLDAgKzEsMTExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1Zk9iamVj
dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPGNzdGRpbnQ+Cisj
aW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgZmluYWwgOiBwdWJsaWMgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZigpOworICAgIHZp
cnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKTsKKworICAgIGJv
b2wgaXNETUFCdWZCYXNlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0
b3IqLCBUZXh0dXJlTWFwcGVyTGF5ZXIqKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN3YXBC
dWZmZXIoKSBvdmVycmlkZTsKKworICAgIGNsYXNzIERNQUJ1ZkxheWVyIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPERNQUJ1ZkxheWVyPiwgcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgor
ICAgICAgICBETUFCdWZMYXllcihETUFCdWZPYmplY3QmJiwgVGV4dHVyZU1hcHBlckdMOjpGbGFn
cyA9IDApOworICAgICAgICB2aXJ0dWFsIH5ETUFCdWZMYXllcigpOworCisgICAgICAgIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSB7IH0sIGZsb2F0IG9w
YWNpdHkgPSAxLjApIGZpbmFsOworCisgICAgICAgIHZvaWQgcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fb2JqZWN0LnJlbGVhc2VGbGFnLnJlbGVhc2UoKTsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlETUFCdWY7CisKKyAgICAgICAgc3RydWN0IEVHTEltYWdlRGF0YTsKKyAgICAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IGNyZWF0ZUVHTEltYWdlRGF0
YShETUFCdWZPYmplY3QmKTsKKworICAgICAgICBETUFCdWZPYmplY3QgbV9vYmplY3Q7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgICAgICBU
ZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjX21heGltdW1BZ2UgeyAxNiB9OworICAgICAgICB1bnNpZ25lZCBtX2FnZSB7
IDAgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgICB2b2lkIHB1c2hE
TUFCdWYoRE1BQnVmT2JqZWN0JiYgZG1hYnVmT2JqZWN0LCBjb25zdCBGJiBjb25zdHJ1Y3Rvciwg
VGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IDApCisgICAgeworICAgICAgICBBU1NFUlQo
bV9sb2NrLmlzSGVsZCgpKTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbGF5ZXJzLmVuc3Vy
ZShkbWFidWZPYmplY3QuaGFuZGxlLAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBETUFCdWZMYXllcihjb25zdHJ1Y3RvcihXVEZNb3ZlKGRt
YWJ1Zk9iamVjdCkpLCBmbGFncykpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHB1c2hETUFC
dWYocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHB1c2hETUFCdWYoUmVmPERNQUJ1ZkxheWVyPiYmKTsKKworI2lmbmRlZiBOREVC
VUcKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2NvbXBvc2l0b3JUaHJlYWQ7CisjZW5kaWYKKworICAg
IHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1aW50cHRyX3QsIFJlZjxETUFCdWZMYXllcj4sIFdU
Rjo6RGVmYXVsdEhhc2g8dWludHB0cl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50cHRyX3Q+PjsKKyAgICBMYXllck1hcCBtX2xheWVyczsKKworICAgIFJlZlB0cjxE
TUFCdWZMYXllcj4gbV9wZW5kaW5nTGF5ZXI7CisgICAgUmVmUHRyPERNQUJ1ZkxheWVyPiBtX2Nv
bW1pdHRlZExheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1RFWFRVUkVNQVBQRVJfUExBVEZPUk1MQVlFUlBST1hZKFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGlzRE1BQnVmQmFzZWQoKSk7CisKKyNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454329</attachid>
            <date>2022-03-10 03:02:35 -0800</date>
            <delta_ts>2022-03-15 00:33:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237328-20220310120233.patch</filename>
            <type>text/plain</type>
            <size>80362</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNlMGE5MjE1OTdmOWUy
ZWE0NzMwNTI4ZThlYjE5NGViMDliMGMxNC4uNzhkMjg5N2M5ZmJhZTVkM2E0NmRkZDk2ZDNlZmU1
NGE2MzdmNjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMi0wMy0xMCAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBQ
cm92aWRlIERNQUJ1Zi1iYXNlZCBjb21wb3NpdGlvbiBsYXllcnMsIERNQUJ1ZlZpZGVvU2luayBp
bnRlZ3JhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW50cm9kdWNlIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGEgVGV4
dHVyZU1hcHBlciBwcm94eQorICAgICAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRsZXMgcGxh
dGZvcm0gbGF5ZXJzIGJhY2tlZCBieSBkbWFidWYgb2JqZWN0cy4KKyAgICAgICAgVGhpcyB3aWxs
IGJlIHVzZWQgdG8gaGFuZGxlIGRpc3BsYXkgb2YgZG1hYnVmIHByb2R1Y2VycyBsaWtlIEdTdHJl
YW1lcgorICAgICAgICBwaXBlbGluZXMgb3IgQU5HTEUtYmFja2VkIFdlYkdMIGNvbnRleHRzLiBU
aGUgRE1BQnVmTGF5ZXIgY2xhc3MgaXMgdGhlCisgICAgICAgIHBsYXRmb3JtIGxheWVyIG9iamVj
dCwgaGFuZGxpbmcgZGlzcGxheSBvZiB0aGUgYWN0dWFsIGRtYWJ1Zi4gVGhlIHByb3h5CisgICAg
ICAgIGl0c2VsZiBpcyB0YXNrZWQgd2l0aCBjcmVhdGluZyBhbmQgY2FjaGluZyBzdWNoIGxheWVy
cyBmb3IgYW55IGRtYWJ1ZgorICAgICAgICBvYmplY3QgdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhl
IHByb2R1Y2VyLgorCisgICAgICAgIEZvciBlYWNoIGRtYWJ1ZiBvYmplY3QgcHVzaGVkIGludG8g
dGhlIHByb3h5LCB0aGUgYWNjb3JkaW5nIERNQUJ1ZkxheWVyCisgICAgICAgIG9iamVjdCBpcyBz
cGF3bmVkIGFuZCBjYWNoZWQgZm9yIGZ1dHVyZSByZXVzZSwgZXhwZWN0aW5nIHRoZSBwcm9kdWNl
cgorICAgICAgICB0byBiZSBhYmxlIHRvIHByb3ZpZGUgZG1hYnVmcyBmcm9tIGEgcG9vbCBvciBz
d2FwY2hhaW4gb2YgdGhlc2Ugb2JqZWN0cy4KKyAgICAgICAgVGhlIGNhY2hlIGlzIGVtcHRpZWQg
d2hlbmV2ZXIgZG1hYnVmcyBnbyB1bnVzZWQgZm9yIGEgY2VydGFpbiBhbW91bnQgb2YKKyAgICAg
ICAgc3dhcHMsIG9yIGlmIHRoZSBzaXplIG9mIHRoZSBwcm92aWRlZCBkbWFidWZzIGNoYW5nZXMu
CisKKyAgICAgICAgRE1BQnVmRm9ybWF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBkaWZmZXJl
bnQgRFJNIGZvcm1hdHMsIGZvcgorICAgICAgICBpbnN0YW5jZSBob3cgZGlmZmVyZW50IHBsYW5l
cyBmb3Igc3BlY2lmaWMgZm9ybWF0cyBhcmUgZm9ybWF0dGVkIGFuZAorICAgICAgICBzaXplZC4K
KworICAgICAgICBETUFCdWZPYmplY3QgaXMgYSBjbGFzcyB0aGF0IGhhbmRsZXMgYSBnaXZlbiBn
cm91cGluZyBvZiBkbWFidWZzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZv
cm1hdC4gSXQgaGFzIGFuIGFzc29jaWF0ZWQgaGFuZGxlIHZhbHVlLAorICAgICAgICBzaXplLCBh
bmQgcGVyLXBsYW5lIGRtYWJ1ZiBmaWxlIGRlc2NyaXB0b3JzLCBvZmZzZXRzLCBzdHJpZGVzIGFu
ZAorICAgICAgICBtb2RpZmllcnMsIGFsb25nIHdpdGggYSBETUFCdWZSZWxlYXNlRmxhZyBpbnN0
YW5jZS4KKworICAgICAgICBETUFCdWZSZWxlYXNlRmxhZyBvYmplY3RzIGFyZSB1c2VkIGFzIGFu
IGV2ZW50ZmQtYmFzZWQgcmVsZWFzZSBtZWNoYW5pc20KKyAgICAgICAgdGhhdCBpbmRpY2F0ZXMg
dG8gdGhlIHByb2R1Y2VyIHRoYXQgdGhlIGdpdmVuIERNQUJ1Zk9iamVjdCBoYXMgYmVlbgorICAg
ICAgICBwcmVzZW50ZWQgYW5kIHN1YnNlcXVlbnRseSByZWxlYXNlZCBhbmQgaXMgdGh1cyBhdmFp
bGFibGUgZm9yIHJldXNlLgorCisgICAgICAgIEdCTUJ1ZmZlclN3YXBjaGFpbiBwcm92aWRlcyBh
IGN1c3RvbSBzd2FwY2hhaW4gaW1wbGVtZW50YXRpb24gdGhhdCdzCisgICAgICAgIGJhc2VkIG9u
IGxpYmdibSBmdW5jdGlvbmFsaXR5LiBFYWNoIHN1Y2ggc3dhcGNoYWluIGhhcyBhIGNhcGFjaXR5
CisgICAgICAgIHNwZWNpZmllZCBkdXJpbmcgY29uc3RydWN0aW9uLCB3aXRoIHRoZSBjYXBhY2l0
aWVzIG9mIGZvdXIgb3IgZWlnaHQKKyAgICAgICAgY3VycmVudGx5IHN1cHBvcnRlZC4gZ2V0QnVm
ZmVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBwcm9kdWNlciB0byBvYnRhaW4gYQorICAgICAgICBidWZm
ZXIgb2JqZWN0IHRoYXQncyB0aGVuIHVzZWQgZm9yIGJhY2tpbmcgb2Ygc3BlY2lmaWMgY29udGVu
dCBsaWtlCisgICAgICAgIEFOR0xFIGV4ZWN1dGlvbiBvciBtZWRpYSdzIHNvZnR3YXJlLWRlY29k
ZWQgdmlkZW8gZnJhbWVzLiBCdWZmZXJzCisgICAgICAgIG9idGFpbmVkIHRoaXMgd2F5IGFyZSBt
b3ZlZCBvdmVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhcnJheSwgd2l0aAorICAgICAgICB0
aGUgZXhwZWN0YXRpb24gb2YgcmV1c2luZyB0aGVtIG9uY2UgdGhleSBhcmUgcmVsZWFzZWQgYnkg
dGhlCisgICAgICAgIGNvbXBvc2l0aW9uIGVuZ2luZS4KKworICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgZW5oYW5jZWQgdG8gdXNlIHRoZQorICAg
ICAgICByZWNlbnRseS1hZGRlZCBXZWJLaXRETUFCdWZWaWRlb1NpbmsgZWxlbWVudCBpZiBpdHMg
dXNlIGlzIGVuYWJsZWQKKyAgICAgICAgdGhyb3VnaCB0aGUgZGV2ZWxvcG1lbnQtcHVycG9zZSBl
bnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgaWYgdGhlCisgICAgICAgIG5lY2Vzc2FyeSBHU3RyZWFt
ZXIgZmFjaWxpdGllcyBhcmUgcHJlc2VudCBvbiB0aGUgc3lzdGVtLiBXaGVuIHRoZXNlCisgICAg
ICAgIGNvbmRpdGlvbnMgYXJlIG1ldCwgdGhlIE5pY29zaWE6OkNvbnRlbnRMYXllciBpbnN0YW5j
ZSBpcyBhbHNvCisgICAgICAgIGNvbnN0cnVjdGVkIHdpdGggYSBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmIGluc3RhbmNlLCBzaW5jZQorICAgICAgICB3ZSBleHBlY3QgdG8g
cHJlc2VudCB0aGUgZG1hYnVmcyB0aHJvdWdoIHRoYXQgZnVuY3Rpb25hbGl0eS4KKworICAgICAg
ICBXaXRoIHRoZSBXZWJLaXRETUFCdWZWaWRlb1NpbmssIHRoZSBpbmNvbWluZyBzYW1wbGVzIGFy
ZSBlaXRoZXIgYmFzZWQKKyAgICAgICAgb24gZG1hYnVmcyAoaW4gY2FzZSBvZiBkbWFidWYtY2Fw
YWJsZSBoYXJkd2FyZSBkZWNvZGVyKSBvciBhcmUganVzdCByYXcKKyAgICAgICAgZGF0YSAobW9z
dCBsaWtlbHkgY29taW5nIGZyb20gYSBzb2Z0d2FyZS1iYXNlZCBkZWNvZGVyKS4gSW4gY2FzZSBv
ZgorICAgICAgICBkbWFidWZzIHdlIGNhbiB1c2UgdGhlIEdzdE1lbW9yeSBwb2ludGVyIGFzIHRo
ZSBoYW5kbGUgdGhyb3VnaCB3aGljaAorICAgICAgICB0aGUgcmVsZXZhbnQgZGF0YSBpcyBjYWNo
ZWQgaW4gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwKKyAgICAgICAgYW5k
IHVwb24gdGhlIGZpcnN0IG9jY3VycmVuY2Ugd2UgcmV0cmlldmUgYWxsIHRoZSByZWxldmFudCBk
bWFidWYgZGF0YQorICAgICAgICBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IHRoYXQgcHJveHkg
aW1wbGVtZW50YXRpb24gdG8gY29uc3RydWN0IGEKKyAgICAgICAgcmVuZGVyYWJsZSBFR0xJbWFn
ZS4KKworICAgICAgICBJbiBjYXNlIG9mIHNvZnR3YXJlLWRlY29kZWQgcmF3IGRhdGEsIHdlIGhh
dmUgdG8gdXNlIHRoZSBzd2FwY2hhaW4KKyAgICAgICAgb2JqZWN0IGFuZCBjb3B5IHRoZSBkYXRh
IG9uIGEgcGVyLXBsYW5lIGJhc2lzIGZvciBlYWNoIHN1Y2ggc2FtcGxlLAorICAgICAgICBmaW5h
bGx5IHB1c2hpbmcgdGhlIGRtYWJ1ZiBkYXRhIG9mIHRoYXQgc3dhcGNoYWluIGJ1ZmZlciBpbnRv
IHRoZQorICAgICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmIGluc3Rh
bmNlLgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQRS50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKToKKyAgICAgICAgKFdlYkNvcmU6
OkRNQUJ1ZkZvcm1hdDo6cGxhbmVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFC
dWZGb3JtYXQ6OnBsYW5lSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZv
cm1hdDo6UGxhbmU6OlBsYW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6
OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXRJ
bXBsOjpkZWZpbmVQbGFuZSk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6Omluc3Rh
bnRpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmT2JqZWN0OjpETUFCdWZPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RE1BQnVmT2JqZWN0Ojp+RE1BQnVmT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1
Zk9iamVjdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1B
QnVmUmVsZWFzZUZsYWcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxlYXNl
RmxhZzo6RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFz
ZUZsYWc6On5ETUFCdWZSZWxlYXNlRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxl
YXNlRmxhZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJlbGVhc2VGbGFn
OjpkdXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6OnJlbGVh
c2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjpyZWxlYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkdCTUJ1ZmZl
clN3YXBjaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OmdldEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpjcmVh
dGVETUFCdWZPYmplY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNo
YWluOjpCdWZmZXI6OlBsYW5lRGF0YTo6flBsYW5lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpoYW5kbGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6Om51bVBsYW5lcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6cGxhbmVEYXRhIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxl
ZCk6CisgICAgICAgICh3ZWJLaXRETUFCdWZWaWRlb1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtH
U3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpmb3VyY2NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hETUFCdWZUb0NvbXBvc2l0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZVZpZGVvU2lua0RNQUJ1Zik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbC5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlS0hSKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lJbWFnZUtIUik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1h
Z2VEYXRhOjp+RUdMSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmFjdGl2YXRlT25Db21wb3NpdGluZ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHlETUFCdWY6OnN3YXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6cHVzaERNQUJ1Zik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RE1B
QnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1Zkxh
eWVyOjpjcmVhdGVFR0xJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmg6IEFkZGVkLgorCiAy
MDIyLTAzLTA5ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAg
IFt3ZWItYW5pbWF0aW9uc10gY291bnRlci1pbmNyZW1lbnQgc2hvdWxkIHN1cHBvcnQgZGlzY3Jl
dGUgYW5pbWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDRlMzAzMzVjZmFkOWVkNzliMDU3
MzczMWY1MjQxMmNiYjlkMjZiMzYuLmI1ZTU4Y2NkNzYxOWU0N2M3N2NiN2IyYzZkN2JhNTgxY2Fi
MDI1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC0xMDEsNiArMTAxLDcgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9n
cmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9n
cmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMWDExLmNwcCBAbm8tdW5pZnkKIAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9H
Qk1EZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIEBu
by11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRleCA1N2ZhN2NhNjdjNGRlYTRhOWU1Yjk4NDVl
NzJhZTI1ODczZDhjZjU1Li5mOGM4YzcwNDkyZmIwOWQxMDlhZWQxMTg0YjdjNjljYTI1ZWIyZjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtODksNiArODksNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybURpc3BsYXkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdM
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAKIAorcGxh
dGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2dibS9HQk1EZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9y
bURpc3BsYXlMaWJXUEUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZQppbmRleCA0ZTBhZWJlMTk3NDc3ODhkNjQwZGM5OTVhNjZjNDNiYmEyYzkxODE2Li43
M2Y2OWM1MDk0NzBlZjhhZTk3OWNjZDk3ZDYxYTBmNzg4YTU0N2Y1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTM0LDYgKzM0LDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5UHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU29saWRDb2xvckxheWVyLmgKQEAgLTYwLDYgKzYxLDcgQEAgaWYgKFVTRV9DT09S
RElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJEbWFidWYuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1Zi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9y
bWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGNkNzI1YTk3MDE1M2M0ZmY3OGE3YmI0OGUwN2I4YzBlN2Y3YzQzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9E
TUFCdWZGb3JtYXQuaApAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNs
dWRlIDxjc3RkaW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBETUFCdWZG
b3JtYXRJbXBsIHsKKworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjcmVhdGVGb3VyQ0MoY2hh
ciBhLCBjaGFyIGIsIGNoYXIgYywgY2hhciBkKQoreworICAgIHJldHVybiB1aW50MzJfdChhKSB8
ICh1aW50MzJfdChiKSA8PCA4KSB8ICh1aW50MzJfdChjKSA8PCAxNikgfCAodWludDMyX3QoZCkg
PDwgMjQpOworfQorCit9CisKK3N0cnVjdCBETUFCdWZGb3JtYXQgeworICAgIGVudW0gY2xhc3Mg
Rm91ckNDIDogdWludDMyX3QgeworICAgICAgICBJbnZhbGlkID0gMCwKKworICAgICAgICBSOCA9
IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICc4JywgJyAnLCAnICcpLAorICAg
ICAgICBHUjg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdHJywgJ1InLCAnOCcs
ICc4JyksCisKKyAgICAgICAgWFJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3Vy
Q0MoJ1gnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgWEJHUjg4ODggPSBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVGb3VyQ0MoJ1gnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCWDg4ODgg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnWCcsICcyJywgJzQnKSwKKyAg
ICAgICAgQkdSWDg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAnWCcs
ICcyJywgJzQnKSwKKyAgICAgICAgQVJHQjg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVG
b3VyQ0MoJ0EnLCAnUicsICcyJywgJzQnKSwKKyAgICAgICAgQUJHUjg4ODggPSBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnQicsICcyJywgJzQnKSwKKyAgICAgICAgUkdCQTg4
ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnQScsICcyJywgJzQnKSwK
KyAgICAgICAgQkdSQTg4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0InLCAn
QScsICcyJywgJzQnKSwKKyAgICAgICAgUkdCODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRl
Rm91ckNDKCdSJywgJ0cnLCAnMicsICc0JyksCisgICAgICAgIEJHUjg4OCA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdHJywgJzInLCAnNCcpLAorCisgICAgICAgIEk0MjAg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0knLCAnNCcsICcyJywgJzAnKSwKKyAg
ICAgICAgWVYxMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJzEn
LCAnMicpLAorICAgICAgICBBNDIwID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdB
JywgJzQnLCAnMicsICcwJyksCisgICAgICAgIE5WMTIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ04nLCAnVicsICcxJywgJzInKSwKKyAgICAgICAgTlYyMSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzInLCAnMScpLAorCisgICAgICAgIFlVWTIg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1knLCAnVScsICdZJywgJzInKSwKKyAg
ICAgICAgWVZZVSA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdWJywgJ1kn
LCAnVScpLAorICAgICAgICBVWVZZID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdV
JywgJ1knLCAnVicsICdZJyksCisgICAgICAgIFZZVVkgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1YnLCAnWScsICdVJywgJ1knKSwKKyAgICAgICAgVlVZQSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdVJywgJ1knLCAnQScpLAorICAgICAgICBBWVVWID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdBJywgJ1knLCAnVScsICdWJyksCisKKyAg
ICAgICAgWTQ0NCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzQn
LCAnNCcpLAorICAgICAgICBZNDFCID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJzQnLCAnMScsICdCJyksCisgICAgICAgIFk0MkIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnNCcsICcyJywgJ0InKSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBjX21heFBsYW5lcyA9IDQ7CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0M+IHN0
YXRpYyBETUFCdWZGb3JtYXQgY3JlYXRlKCkgPSBkZWxldGU7CisgICAgc3RhdGljIERNQUJ1ZkZv
cm1hdCBjcmVhdGUodWludDMyX3QpOworCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJjY1ZhbHVl
LCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KKyAgICBzdGF0aWMgRE1BQnVmRm9y
bWF0IGluc3RhbnRpYXRlKCk7CisKKyAgICBGb3VyQ0MgZm91cmNjIHsgRm91ckNDOjpJbnZhbGlk
IH07CisgICAgdW5zaWduZWQgbnVtUGxhbmVzIHsgMCB9OworCisgICAgdWludDMyX3QgcGxhbmVX
aWR0aCh1bnNpZ25lZCBwbGFuZUluZGV4LCB1aW50MzJfdCB3aWR0aCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwgY19tYXhQbGFuZXMpOworICAgICAgICByZXR1cm4g
KHdpZHRoID4+IHBsYW5lc1twbGFuZUluZGV4XS5ob3Jpem9udGFsU3Vic2FtcGxpbmcpOworICAg
IH0KKworICAgIHVpbnQzMl90IHBsYW5lSGVpZ2h0KHVuc2lnbmVkIHBsYW5lSW5kZXgsIHVpbnQz
Ml90IGhlaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChwbGFuZUluZGV4IDwgY19t
YXhQbGFuZXMpOworICAgICAgICByZXR1cm4gKGhlaWdodCA+PiBwbGFuZXNbcGxhbmVJbmRleF0u
dmVydGljYWxTdWJzYW1wbGluZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8Rm91ckNDIGZvdXJj
Y1ZhbHVlLCB1bnNpZ25lZCBoc1ZhbHVlLCB1bnNpZ25lZCB2c1ZhbHVlPgorICAgIHN0cnVjdCBQ
bGFuZURlZmluaXRpb24geworICAgICAgICBzdGF0aWMgY29uc3RleHByIEZvdXJDQyBmb3VyY2Mg
PSBmb3VyY2NWYWx1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBob3Jpem9u
dGFsU3Vic2FtcGxpbmcgPSBoc1ZhbHVlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHZlcnRpY2FsU3Vic2FtcGxpbmcgPSB2c1ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
UGxhbmUgeworICAgICAgICBQbGFuZSgpID0gZGVmYXVsdDsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQbGFuZURlZml0aW9uVHlwZT4KKyAgICAgICAgUGxhbmUoY29uc3QgUGxhbmVEZWZp
dGlvblR5cGUmKQorICAgICAgICAgICAgOiBmb3VyY2MoUGxhbmVEZWZpdGlvblR5cGU6OmZvdXJj
YykKKyAgICAgICAgICAgICwgaG9yaXpvbnRhbFN1YnNhbXBsaW5nKFBsYW5lRGVmaXRpb25UeXBl
Ojpob3Jpem9udGFsU3Vic2FtcGxpbmcpCisgICAgICAgICAgICAsIHZlcnRpY2FsU3Vic2FtcGxp
bmcoUGxhbmVEZWZpdGlvblR5cGU6OnZlcnRpY2FsU3Vic2FtcGxpbmcpCisgICAgICAgIHsgfQor
CisgICAgICAgIEZvdXJDQyBmb3VyY2MgeyBGb3VyQ0M6OkludmFsaWQgfTsKKyAgICAgICAgdW5z
aWduZWQgaG9yaXpvbnRhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgICAgICB1bnNpZ25lZCB2ZXJ0
aWNhbFN1YnNhbXBsaW5nIHsgMCB9OworICAgIH07CisgICAgc3RkOjphcnJheTxQbGFuZSwgY19t
YXhQbGFuZXM+IHBsYW5lczsKK307CisKK25hbWVzcGFjZSBETUFCdWZGb3JtYXRJbXBsIHsKKwor
dGVtcGxhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0MgZm91cmNjVmFsdWU+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IGNyZWF0ZVNpbmdsZVBsYW5lUkdCQSgpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1h
dDo6aW5zdGFudGlhdGU8Zm91cmNjVmFsdWUsCisgICAgICAgIERNQUJ1ZkZvcm1hdDo6UGxhbmVE
ZWZpbml0aW9uPGZvdXJjY1ZhbHVlLCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IElu
ZGV4LCBzaXplX3QgU2l6ZSwgdHlwZW5hbWUgUGxhbmVEZWZpbml0aW9uVHlwZSwgdHlwZW5hbWUu
Li4gUGxhbmVEZWZpbml0aW9uVHlwZXM+Cit2b2lkIGRlZmluZVBsYW5lKHN0ZDo6YXJyYXk8RE1B
QnVmRm9ybWF0OjpQbGFuZSwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4mIHBsYW5lcykKK3sK
KyAgICBuZXcgKCZwbGFuZXNbSW5kZXhdKSBETUFCdWZGb3JtYXQ6OlBsYW5lKFBsYW5lRGVmaW5p
dGlvblR5cGUgeyB9KTsKKyAgICBpZiBjb25zdGV4cHIgKChJbmRleCArIDEpIDwgU2l6ZSkKKyAg
ICAgICAgZGVmaW5lUGxhbmU8SW5kZXggKyAxLCBTaXplLCBQbGFuZURlZmluaXRpb25UeXBlcy4u
Lj4ocGxhbmVzKTsKK30KKworfQorCit0ZW1wbGF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3Vy
Y2NWYWx1ZSwgdHlwZW5hbWUuLi4gUGxhbmVEZWZpbml0aW9uVHlwZXM+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGUoKQoreworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mLi4uKFBsYW5lRGVmaW5pdGlvblR5cGVzKSA8PSA0KTsKKworICAgIERNQUJ1ZkZvcm1h
dCBmb3JtYXQ7CisgICAgZm9ybWF0LmZvdXJjYyA9IGZvdXJjY1ZhbHVlOworICAgIGZvcm1hdC5u
dW1QbGFuZXMgPSBzaXplb2YuLi4oUGxhbmVEZWZpbml0aW9uVHlwZXMpOworICAgIERNQUJ1ZkZv
cm1hdEltcGw6OmRlZmluZVBsYW5lPDAsIHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBlcyks
IFBsYW5lRGVmaW5pdGlvblR5cGVzLi4uPihmb3JtYXQucGxhbmVzKTsKKyAgICByZXR1cm4gZm9y
bWF0OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4OD4oKQoreworICAgIHJldHVybiBE
TUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpYUkdCODg4OD4o
KTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNy
ZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1B
QnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6WEJHUjg4ODg+KCk7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVh
dGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQlg4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1
ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlJHQlg4ODg4PigpOwor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRl
PERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JYODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZG
b3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpCR1JYODg4OD4oKTsKK30K
KwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9y
bWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QVJHQjg4ODg+KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OkFCR1I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OkFCR1I4ODg4PigpOworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpSR0JBODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpSR0JBODg4OD4oKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1w
bDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QkdSQTg4ODg+KCk7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9y
bWF0OjpGb3VyQ0M6Okk0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50
aWF0ZTxGb3VyQ0M6Okk0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAw
LCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpG
b3VyQ0M6OllWMTI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxG
b3VyQ0M6OllWMTIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQbGFu
ZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OkE0MjA+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6
OkE0MjAsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAg
ICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDE+LAorICAgICAgICBQbGFuZURlZmlu
aXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6
OlI4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFC
dWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYxMj4oKQoreworICAgIHJl
dHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYxMiwKKyAgICAgICAgUGxh
bmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248
Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZv
cm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMT4oKQor
eworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6TlYyMSwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpHUjg4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVVZMj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
WVVZMiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwgMD4+KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0
OjppbnN0YW50aWF0ZTxGb3VyQ0M6OllWWVUsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0
IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpVWVZZPigpCit7Cisg
ICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpVWVZZLAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8
PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6VllVWT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRl
PEZvdXJDQzo6WVZZVSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwg
MD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0
OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE+KCkKK3sKKyAgICByZXR1cm4gRE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlZVWUEsCisgICAgICAgIFBsYW5lRGVmaW5p
dGlvbjxGb3VyQ0M6OkFCR1I4ODg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
QVlVVj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
VlVZQSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6QUJHUjg4ODgsIDAsIDA+Pigp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDQ0PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZNDQ0LAorICAgICAgICBQbGFuZURlZmluaXRpb248
Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAw
LCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+PigpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDFCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6
aW5zdGFudGlhdGU8Rm91ckNDOjpZNDFCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckND
OjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAyLCAwPiwK
KyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDIsIDA+PigpOworfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpZNDJCPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFu
dGlhdGU8Rm91ckNDOjpZNDJCLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwg
MCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAwPiwKKyAgICAg
ICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDA+PigpOworfQorCitpbmxpbmUgRE1B
QnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlKHVpbnQzMl90IGZvdXJjY1ZhbHVlKQorewor
ICAgIHN3aXRjaCAoZm91cmNjVmFsdWUpIHsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WFJH
Qjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WFJHQjg4ODg+KCk7CisgICAg
Y2FzZSB1aW50MzJfdChGb3VyQ0M6OlhCR1I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxG
b3VyQ0M6OlhCR1I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpSR0JYODg4OCk6
CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpSR0JYODg4OD4oKTsKKyAgICBjYXNlIHVp
bnQzMl90KEZvdXJDQzo6QkdSWDg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
QkdSWDg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFSR0I4ODg4KToKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFSR0I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpBQkdSODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBQkdSODg4
OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6UkdCQTg4ODgpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6UkdCQTg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6
OkJHUkE4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkJHUkE4ODg4PigpOwor
ICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpJNDIwKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxG
b3VyQ0M6Okk0MjA+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllWMTIpOgorICAgICAg
ICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WVYxMj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJD
Qzo6QTQyMCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBNDIwPigpOworICAgIGNh
c2UgdWludDMyX3QoRm91ckNDOjpOVjEyKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6
Ok5WMTI+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Ok5WMjEpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6TlYyMT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WVVZ
Mik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZVVkyPigpOworICAgIGNhc2UgdWlu
dDMyX3QoRm91ckNDOjpZVllVKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllWWVU+
KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlVZVlkpOgorICAgICAgICByZXR1cm4gY3Jl
YXRlPEZvdXJDQzo6VVlWWT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VllVWSk6Cisg
ICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpVWVZZPigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpWVVlBKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlZVWUE+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFZVVYpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZv
dXJDQzo6QVlVVj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQ0NCk6CisgICAgICAg
IHJldHVybiBjcmVhdGU8Rm91ckNDOjpZNDQ0PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckND
OjpZNDFCKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Olk0MUI+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6Olk0MkIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
WTQyQj4oKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg2
NDQ0NDQzOTRmN2I5ZDlmZjQzZGNiZGMzOTJhYmFhNzdjYzVhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaApAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFCdWZS
ZWxlYXNlRmxhZy5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5j
bHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgRE1BQnVmT2JqZWN0IHsKKyAgICBETUFCdWZPYmplY3QodWludHB0cl90IGhh
bmRsZSkKKyAgICAgICAgOiBoYW5kbGUoaGFuZGxlKQorICAgIHsgfQorCisgICAgfkRNQUJ1Zk9i
amVjdCgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0Lm51
bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICBpZiAoZmRbaV0gIT0gLTEpCisgICAgICAgICAg
ICAgICAgY2xvc2UoZmRbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2JqZWN0
KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworICAgIERNQUJ1Zk9iamVjdCYgb3BlcmF0
b3I9KGNvbnN0IERNQUJ1Zk9iamVjdCYpID0gZGVsZXRlOworCisgICAgRE1BQnVmT2JqZWN0KERN
QUJ1Zk9iamVjdCYmIG8pCisgICAgICAgIDogaGFuZGxlKG8uaGFuZGxlKQorICAgICAgICAsIGZv
cm1hdChvLmZvcm1hdCkKKyAgICAgICAgLCB3aWR0aChvLndpZHRoKQorICAgICAgICAsIGhlaWdo
dChvLmhlaWdodCkKKyAgICAgICAgLCByZWxlYXNlRmxhZyhXVEZNb3ZlKG8ucmVsZWFzZUZsYWcp
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1hdC5udW1QbGFu
ZXM7ICsraSkgeworICAgICAgICAgICAgZmRbaV0gPSBvLmZkW2ldOworICAgICAgICAgICAgby5m
ZFtpXSA9IC0xOworCisgICAgICAgICAgICBvZmZzZXRbaV0gPSBvLm9mZnNldFtpXTsKKyAgICAg
ICAgICAgIHN0cmlkZVtpXSA9IG8uc3RyaWRlW2ldOworICAgICAgICAgICAgbW9kaWZpZXJbaV0g
PSBvLm1vZGlmaWVyW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgRE1BQnVmT2JqZWN0JiBv
cGVyYXRvcj0oRE1BQnVmT2JqZWN0JiYgbykKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZv
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIHRoaXMtPn5ETUFCdWZPYmpl
Y3QoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBETUFCdWZPYmplY3QoV1RGTW92ZShvKSk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB1aW50cHRyX3QgaGFuZGxlIHsgMCB9Owor
ICAgIERNQUJ1ZkZvcm1hdCBmb3JtYXQgeyB9OworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9Owor
ICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICBETUFCdWZSZWxlYXNlRmxhZyByZWxlYXNl
RmxhZyB7IH07CisgICAgc3RkOjphcnJheTxpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+
IGZkIHsgLTEsIC0xLCAtMSwgLTEgfTsKKyAgICBzdGQ6OmFycmF5PHNpemVfdCwgRE1BQnVmRm9y
bWF0OjpjX21heFBsYW5lcz4gb2Zmc2V0IHsgMCwgMCwgMCwgMCB9OworICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHN0cmlkZSB7IDAsIDAsIDAsIDAg
fTsKKyAgICBzdGQ6OmFycmF5PHVpbnQ2NF90LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBt
b2RpZmllciB7IDAsIDAsIDAsIDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZSZWxl
YXNlRmxhZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJl
bGVhc2VGbGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y0ZDc3NjAwNTNmOTljNTU4NzY1MGEwODZhYWI5NzEw
NDg3NWY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dibS9ETUFCdWZSZWxlYXNlRmxhZy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxz
eXMvZXZlbnRmZC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgRE1BQnVmUmVsZWFzZUZsYWcgeworICAgIERNQUJ1ZlJlbGVh
c2VGbGFnKCkgPSBkZWZhdWx0OworCisgICAgZW51bSBJbml0aWFsaXplVGFnIHsgSW5pdGlhbGl6
ZSB9OworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKEluaXRpYWxpemVUYWcpCisgICAgeworICAgICAg
ICBmZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMgfCBFRkRfTk9OQkxPQ0spOworICAgIH0KKwor
ICAgIH5ETUFCdWZSZWxlYXNlRmxhZygpCisgICAgeworICAgICAgICBpZiAoZmQgIT0gLTEpCisg
ICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7CisgICAgfQorCisgICAgRE1B
QnVmUmVsZWFzZUZsYWcoY29uc3QgRE1BQnVmUmVsZWFzZUZsYWcmKSA9IGRlbGV0ZTsKKyAgICBE
TUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KGNvbnN0IERNQUJ1ZlJlbGVhc2VGbGFnJikgPSBk
ZWxldGU7CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhETUFCdWZSZWxlYXNlRmxhZyYmIG8pCisg
ICAgeworICAgICAgICBmZCA9IG8uZmQ7CisgICAgICAgIG8uZmQgPSAtMTsKKyAgICB9CisKKyAg
ICBETUFCdWZSZWxlYXNlRmxhZyYgb3BlcmF0b3I9KERNQUJ1ZlJlbGVhc2VGbGFnJiYgbykKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgICAgIHRoaXMtPn5ETUFCdWZSZWxlYXNlRmxhZygpOworICAgICAgICBuZXcgKHRoaXMp
IERNQUJ1ZlJlbGVhc2VGbGFnKFdURk1vdmUobykpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgRE1BQnVmUmVsZWFzZUZsYWcgZHVwKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgRE1BQnVm
UmVsZWFzZUZsYWcgZmxhZzsKKyAgICAgICAgZmxhZy5mZCA9IGR1cENsb3NlT25FeGVjKGZkKTsK
KyAgICAgICAgcmV0dXJuIGZsYWc7CisgICAgfQorCisgICAgYm9vbCByZWxlYXNlZCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDAgfTsKKyAgICAgICAgaWYgKHJlYWQoZmQsICZ2
YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAgICAg
IHJldHVybiAhIXZhbHVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9p
ZCByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZSB7IDEgfTsKKyAgICAgICAgd3JpdGUoZmQs
ICZ2YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgfQorCisgICAgaW50IGZkIHsgLTEgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjRkYTdlZDYzM2E2ZmViZWJkZjFkOTE4ODVmMzUzNDQxODEwNDBjZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJT
d2FwY2hhaW4uY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdCTUJ1ZmZlclN3
YXBjaGFpbi5oIgorCisjaW5jbHVkZSAiR0JNRGV2aWNlLmgiCisjaW5jbHVkZSA8Z2JtLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0JNQnVmZmVyU3dhcGNoYWluOjpHQk1CdWZmZXJTd2Fw
Y2hhaW4oQnVmZmVyU3dhcGNoYWluU2l6ZSBzaXplKQoreworICAgIEFTU0VSVCh1bnNpZ25lZChz
aXplKSA8IGNfbWF4QnVmZmVycyk7CisgICAgbV9hcnJheS5zaXplID0gdW5zaWduZWQoc2l6ZSk7
Cit9CisKK0dCTUJ1ZmZlclN3YXBjaGFpbjo6fkdCTUJ1ZmZlclN3YXBjaGFpbigpID0gZGVmYXVs
dDsKKworUmVmUHRyPEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyPiBHQk1CdWZmZXJTd2FwY2hh
aW46OmdldEJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7Cisg
ICAgYXV0byYgZGV2aWNlID0gR0JNRGV2aWNlOjpnZXQoKTsKKworICAgIC8vIElmIHRoZSBkZXNj
cmlwdGlvbiBvZiB0aGUgcmVxdWVzdGVkIGJ5ZmZlcnMgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUg
ZGVzY3JpcHRpb24gdG8gdGhlIG5ldyBvbmUgYW5kIHdyZWNrIHRoZSBleGlzdGluZyBidWZmZXJz
LgorICAgIC8vIFRoaXMgc2hvdWxkIGhhbmRsZSBjaGFuZ2VzIGluIGZvcm1hdCBvciBkaW1lbnNp
b24gb2YgdGhlIGJ1ZmZlcnMuCisgICAgaWYgKGRlc2NyaXB0aW9uLmZvcm1hdC5mb3VyY2MgIT0g
bV9hcnJheS5kZXNjcmlwdGlvbi5mb3JtYXQuZm91cmNjIHx8IGRlc2NyaXB0aW9uLndpZHRoICE9
IG1fYXJyYXkuZGVzY3JpcHRpb24ud2lkdGggfHwgZGVzY3JpcHRpb24uaGVpZ2h0ICE9IG1fYXJy
YXkuZGVzY3JpcHRpb24uaGVpZ2h0KSB7CisgICAgICAgIG1fYXJyYXkuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbjsKKyAgICAgICAgbV9hcnJheS5vYmplY3QgPSB7IH07CisgICAgfQorCisgICAg
Ly8gU3dhcGNoYWluIHdhcyBhc2tlZCB0byBwcm92aWRlIGEgYnVmZmVyLiBUaGUgYnVmZmVyIGFy
cmF5IGlzIHRyYXZlcnNlZCB0byBmaW5kIG9uZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hcnJheS5zaXplOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2FycmF5Lm9iamVjdFtpXSkg
eworICAgICAgICAgICAgLy8gSWYgbm8gYnVmZmVyIHdhcyBzcGF3bmVkIHlldCBhdCB0aGlzIGxv
Y2F0aW9uLCB3ZSBkbyB0aGF0LCBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAgYXV0byBidWZm
ZXIgPSBhZG9wdFJlZigqbmV3IEJ1ZmZlcihtX2hhbmRsZUdlbmVyYXRvcisrLCBkZXNjcmlwdGlv
bikpOworICAgICAgICAgICAgbV9hcnJheS5vYmplY3RbaV0gPSBidWZmZXIuY29weVJlZigpOwor
CisgICAgICAgICAgICAvLyBGaWxsIG91dCB0aGUgYnVmZmVyJ3MgZGVzY3JpcHRpb24gYW5kIHBs
YW5lIGluZm9ybWF0aW9uIGZvciBrbm93biBhbmQgc3VwcG9ydGVkIGZvcm1hdHMuCisgICAgICAg
ICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmZvcm1hdC5mb3VyY2MpIHsKKyAgICAgICAgICAgIGNh
c2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1h
dDo6Rm91ckNDOjpSR0JYODg4ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6OkJHUlg4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJH
Qjg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4ODoK
KyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQkE4ODg4OgorICAgICAg
ICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODg6CisgICAgICAgICAgICBj
YXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpJNDIwOgorICAgICAgICAgICAgY2FzZSBETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6WVYxMjoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6OkE0MjA6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjEyOgor
ICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMToKKyAgICAgICAgICAg
IGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllVWTI6CisgICAgICAgICAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpZVllVOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6VVlWWToKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZZVVk6
CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpWVVlBOgorICAgICAgICAg
ICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVlVVjoKKyAgICAgICAgICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6Olk0NDQ6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpZNDFCOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQy
QjoKKyAgICAgICAgICAgICAgICBidWZmZXItPm1fZGVzY3JpcHRpb24uZm9ybWF0Lm51bVBsYW5l
cyA9IGRlc2NyaXB0aW9uLmZvcm1hdC5udW1QbGFuZXM7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlci0+bV9kZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxhbmVz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5tX3BsYW5lc1tpXS5mb3VyY2Mg
PSBkZXNjcmlwdGlvbi5mb3JtYXQucGxhbmVzW2ldLmZvdXJjYzsKKyAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLT5tX3BsYW5lc1tpXS53aWR0aCA9IGRlc2NyaXB0aW9uLmZvcm1hdC5wbGFuZVdp
ZHRoKGksIGRlc2NyaXB0aW9uLndpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5t
X3BsYW5lc1tpXS5oZWlnaHQgPSBkZXNjcmlwdGlvbi5mb3JtYXQucGxhbmVIZWlnaHQoaSwgZGVz
Y3JpcHRpb24uaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBwbGFuZSwgd2Ugc3Bh
d24gYSBnYm1fYm8gb2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIGFuZCBmb3JtYXQuCisg
ICAgICAgICAgICAvLyBUT0RPOiBHQk1fQk9fVVNFX0xJTkVBUiB3aWxsIGJlIG5lZWRlZCB3aGVu
IHRyYW5zZmVycmluZyBtZW1vcnkgaW50byB0aGUgYm8gKGUuZy4gY29weWluZworICAgICAgICAg
ICAgLy8gb3ZlciB0aGUgc29mdHdhcmUtZGVjb2RlZCB2aWRlbyBkYXRhKSwgYnV0IG1pZ2h0IG5v
dCBiZSByZXF1aXJlZCBmb3IgYmFja2luZyBlLmcuIEFOR0xFIHJlbmRlcmluZy4KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXItPm1fZGVzY3JpcHRpb24uZm9ybWF0
Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcGxhbmUgPSBidWZmZXIt
Pm1fcGxhbmVzW2ldOworICAgICAgICAgICAgICAgIHBsYW5lLmJvID0gZ2JtX2JvX2NyZWF0ZShk
ZXZpY2UuZGV2aWNlKCksIHBsYW5lLndpZHRoLCBwbGFuZS5oZWlnaHQsIHVpbnQzMl90KHBsYW5l
LmZvdXJjYyksIEdCTV9CT19VU0VfTElORUFSKTsKKyAgICAgICAgICAgICAgICBwbGFuZS5zdHJp
ZGUgPSBnYm1fYm9fZ2V0X3N0cmlkZShwbGFuZS5ibyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIExvY2sgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAgYnVm
ZmVyLT5tX3N0YXRlLmxvY2tlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhbiBleGlzdGluZyBidWZm
ZXIgYXQgdGhpcyBsb2NhdGlvbi4gSWYgbWFya2VkIGFzIGxvY2tlZCwgdXBkYXRlIGl0cyBzdGF0
ZSBieSByZWFkaW5nCisgICAgICAgIC8vIHRoZSByZWxlYXNlIGZsYWcuIElmIHN0aWxsIGxvY2tl
ZCBhZnRlciB0aGF0LCB3ZSBoYXZlIHRvIGNvbnRpbnVlIG92ZXIgdG8gdGhlIG5leHQgY2FuZGlk
YXRlLgorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2FycmF5Lm9iamVj
dFtpXTsKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1fc3RhdGUubG9ja2VkKQorICAgICAgICAg
ICAgICAgIGJ1ZmZlci0+bV9zdGF0ZS5sb2NrZWQgPSAhYnVmZmVyLT5tX3N0YXRlLnJlbGVhc2VG
bGFnLnJlbGVhc2VkKCk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1fc3RhdGUubG9ja2Vk
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhp
cyBidWZmZXIgd2FzIHVubG9ja2VkLCBzbyBpdCBjYW4gYmUgdXNlZC4gTG9jayBhbmQgcmV0dXJu
IGl0LgorICAgICAgICBhdXRvIGJ1ZmZlciA9IG1fYXJyYXkub2JqZWN0W2ldLmNvcHlSZWYoKTsK
KyAgICAgICAgYnVmZmVyLT5tX3N0YXRlLmxvY2tlZCA9IHRydWU7CisKKyAgICAgICAgLy8gU3dh
cCBvdXQgdGhlIGxvY2F0ZWQgYnVmZmVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBxdWV1ZS4g
V2hlbiB0aGUgbmV4dCBidWZmZXIgaXMgcmVxdWVzdGVkIGZyb20gdGhpcworICAgICAgICAvLyBz
d2FwY2hhaW4sIHRoZSBwcmV2aW91c2x5LXVzZWQgYnVmZmVycyB3aWxsIGJlIHRyYXZlcnNlZCBh
bmQgdGVzdGVkIGZvciByZWxlYXNlIGZpcnN0LCBtZWFuaW5nIHRoZXJlJ3MgYQorICAgICAgICAv
LyBoaWdoZXIgY2hhbmNlIHdlIHdpbGwgYmUgYWJsZSB0byByZXVzZSB0aGVtLCB3aXRob3V0IHRo
ZSBwZW5hbHR5IG9mIGhhdmluZyB0byB0cmF2ZXJzZSB0byBkZWVwIGludG8gdGhlCisgICAgICAg
IC8vIHN3YXBjaGFpbiBhcnJheS4KKyAgICAgICAgZm9yICgrK2k7IGkgPCBtX2FycmF5LnNpemUg
JiYgISFtX2FycmF5Lm9iamVjdFtpXTsgKytpKQorICAgICAgICAgICAgc3RkOjpzd2FwKG1fYXJy
YXkub2JqZWN0W2kgLSAxXSwgbV9hcnJheS5vYmplY3RbaV0pOworCisgICAgICAgIHJldHVybiBi
dWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dCTUJ1ZmZlclN3YXBj
aGFpbjo6QnVmZmVyOjpCdWZmZXIodWludDMyX3QgaGFuZGxlLCBjb25zdCBCdWZmZXJEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCisgICAgOiBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX2Rlc2Ny
aXB0aW9uKGRlc2NyaXB0aW9uKQoreworICAgIG1fc3RhdGUucmVsZWFzZUZsYWcgPSBETUFCdWZS
ZWxlYXNlRmxhZyhETUFCdWZSZWxlYXNlRmxhZzo6SW5pdGlhbGl6ZSk7Cit9CisKK0dCTUJ1ZmZl
clN3YXBjaGFpbjo6QnVmZmVyOjp+QnVmZmVyKCkgPSBkZWZhdWx0OworCitETUFCdWZPYmplY3Qg
R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OmNyZWF0ZURNQUJ1Zk9iamVjdCh1aW50cHRyX3Qg
aGFuZGxlKSBjb25zdAoreworICAgIERNQUJ1Zk9iamVjdCBvYmplY3QoaGFuZGxlKTsKKyAgICBv
YmplY3QuZm9ybWF0ID0gbV9kZXNjcmlwdGlvbi5mb3JtYXQ7CisgICAgb2JqZWN0LndpZHRoID0g
bV9kZXNjcmlwdGlvbi53aWR0aDsKKyAgICBvYmplY3QuaGVpZ2h0ID0gbV9kZXNjcmlwdGlvbi5o
ZWlnaHQ7CisgICAgb2JqZWN0LnJlbGVhc2VGbGFnID0gbV9zdGF0ZS5yZWxlYXNlRmxhZy5kdXAo
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9uLmZvcm1hdC5u
dW1QbGFuZXM7ICsraSkgeworICAgICAgICBvYmplY3QuZmRbaV0gPSBnYm1fYm9fZ2V0X2ZkKG1f
cGxhbmVzW2ldLmJvKTsKKyAgICAgICAgb2JqZWN0Lm9mZnNldFtpXSA9IDA7CisgICAgICAgIG9i
amVjdC5zdHJpZGVbaV0gPSBtX3BsYW5lc1tpXS5zdHJpZGU7CisgICAgICAgIC8vIFRPRE86IHRo
ZXNlIHNob3VsZCBiZSB0aGUgcGxhbmUtc3BlY2lmaWMgbW9kaWZpZXJzLiBXZSBkb24ndCB1c2Ug
dGhlbSB5ZXQuCisgICAgICAgIG9iamVjdC5tb2RpZmllcltpXSA9IDA7CisgICAgfQorCisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OlBsYW5lRGF0
YTo6flBsYW5lRGF0YSgpCit7CisgICAgaWYgKGJvKQorICAgICAgICBnYm1fYm9fZGVzdHJveShi
byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jODQyNDEwNmYzYjVjN2Y1ZGQwNTMwNzc1MjFlYjdhZGRhMzAwODQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3
YXBjaGFpbi5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNp
bmNsdWRlICJETUFCdWZPYmplY3QuaCIKKyNpbmNsdWRlICJETUFCdWZSZWxlYXNlRmxhZy5oIgor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL05vbm1vdmFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK3N0cnVjdCBn
Ym1fYm87CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0JNQnVmZmVyU3dhcGNoYWlu
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdCTUJ1ZmZlclN3YXBjaGFpbj4geworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIFRoZSBzaXplIHNob3Vs
ZCBiZSBhZGp1c3RlZCB0byB0aGUgdXNlLWNhc2UuCisgICAgLy8gRm9yIGN5Y2xpY2FsIHJlbmRl
cmluZyAoZS5nLiBXZWJHTCksIEZvdXIgc2hvdWxkIGJlIGlkZWFsIHNpbmNlIHdlJ2xsIHJlbHkg
b24KKyAgICAvLyBzb21ldGhpbmcgbGlrZSB2c3luYyB0byBtYWludGFpbiBhIGNvbnN0YW50IGZy
YW1lcmF0ZSBhbmQgc3Vic2VxdWVudCBidWZmZXIgY2h1cm4uCisgICAgLy8gVGhlcmUgYXJlIG90
aGVyIHNwb3JhZGljIHByb2R1Y2VycyBsaWtlIHNvZnR3YXJlLWJhc2VkIG1lZGlhIGRlY29kZXJz
IHRoYXQgd2lsbAorICAgIC8vIGJlIHJlcXVlc3RpbmcgYW5kIGZpbGxpbmcgaW4gYnVmZmVycyBp
biBidXJzdHMgYnV0IHN0aWxsIGhhdmUgdGhlbSBkaXNwbGF5ZWQgb24KKyAgICAvLyBhIGN5Y2xp
Y2FsIGJhc2lzLiBFaWdodCBzaG91bGQgYmUgZW5vdWdoIHRvIGNvdmVyIHRoYXQuCisgICAgLy8g
SW4gYW55IGNhc2UsIHRoZSBzd2FwY2hhaW4gd2lsbCBkbyB3aGF0ZXZlciBpdCBjYW4gdG8gcmV1
c2UgcmVsZWFzZWQgYnVmZmVycworICAgIC8vIGFuZCBub3QgdW5uZWNlc3NhcmlseSBzcGF3biBu
ZXcgb25lcywgbWVhbmluZyB0aGUgbGltaXQgc2hvdWxkbid0IGJlIHJlYWNoZWQuCisgICAgLy8g
SWYgaXQgaXMsIGdldEJ1ZmZlcigpIHdpbGwgcmV0dXJuIGEgbnVsbCBvYmplY3QgYW5kIHRoZSBw
cm9kdWNlciBoYXMgdG8KKyAgICAvLyBoYW5kbGUgdGhhdCBzb21laG93LgorICAgIGVudW0gY2xh
c3MgQnVmZmVyU3dhcGNoYWluU2l6ZSA6IHVuc2lnbmVkIHsKKyAgICAgICAgRm91ciA9IDQsCisg
ICAgICAgIEVpZ2h0ID0gOAorICAgIH07CisKKyAgICBHQk1CdWZmZXJTd2FwY2hhaW4oQnVmZmVy
U3dhcGNoYWluU2l6ZSk7CisgICAgfkdCTUJ1ZmZlclN3YXBjaGFpbigpOworCisgICAgc3RydWN0
IEJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAgICAgICAgRE1BQnVmRm9ybWF0IGZvcm1hdCB7IH07Cisg
ICAgICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9OworICAgICAgICB1aW50MzJfdCBoZWlnaHQgIHsg
MCB9OworICAgIH07CisKKyAgICBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8QnVmZmVyPiB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1
YmxpYzoKKyAgICAgICAgQnVmZmVyKHVpbnQzMl90LCBjb25zdCBCdWZmZXJEZXNjcmlwdGlvbiYp
OworICAgICAgICB+QnVmZmVyKCk7CisKKyAgICAgICAgRE1BQnVmT2JqZWN0IGNyZWF0ZURNQUJ1
Zk9iamVjdCh1aW50cHRyX3QpIGNvbnN0OworCisgICAgICAgIHN0cnVjdCBQbGFuZURhdGEgewor
ICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhbmVEYXRhKTsKKyAgICAgICAgICAg
IFdURl9NQUtFX05PTk1PVkFCTEUoUGxhbmVEYXRhKTsKKworICAgICAgICAgICAgUGxhbmVEYXRh
KCkgPSBkZWZhdWx0OworICAgICAgICAgICAgflBsYW5lRGF0YSgpOworCisgICAgICAgICAgICBE
TUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3VyY2MgeyBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6SW52YWxp
ZCB9OworICAgICAgICAgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgICAgICAgICB1aW50
MzJfdCBoZWlnaHQgeyAwIH07CisgICAgICAgICAgICB1aW50MzJfdCBzdHJpZGUgeyAwIH07Cisg
ICAgICAgICAgICBzdHJ1Y3QgZ2JtX2JvKiBibyB7IG51bGxwdHIgfTsKKyAgICAgICAgfTsKKwor
ICAgICAgICB1aW50MzJfdCBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQorCisg
ICAgICAgIHVuc2lnbmVkIG51bVBsYW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb24u
Zm9ybWF0Lm51bVBsYW5lczsgfQorICAgICAgICBjb25zdCBQbGFuZURhdGEmIHBsYW5lRGF0YSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGluZGV4
IDwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcyk7CisgICAgICAgICAgICByZXR1cm4gbV9wbGFu
ZXNbaW5kZXhdOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xh
c3MgR0JNQnVmZmVyU3dhcGNoYWluOworCisgICAgICAgIHVpbnQzMl90IG1faGFuZGxlIHsgMCB9
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9vbCBsb2NrZWQgeyBmYWxzZSB9Owor
ICAgICAgICAgICAgRE1BQnVmUmVsZWFzZUZsYWcgcmVsZWFzZUZsYWc7CisgICAgICAgIH0gbV9z
dGF0ZTsKKworICAgICAgICBCdWZmZXJEZXNjcmlwdGlvbiBtX2Rlc2NyaXB0aW9uOworICAgICAg
ICBzdGQ6OmFycmF5PFBsYW5lRGF0YSwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gbV9wbGFu
ZXM7CisgICAgfTsKKworICAgIFJlZlB0cjxCdWZmZXI+IGdldEJ1ZmZlcihjb25zdCBCdWZmZXJE
ZXNjcmlwdGlvbiYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y19tYXhCdWZmZXJzID0gODsKKworICAgIHVpbnQzMl90IG1faGFuZGxlR2VuZXJhdG9yIHsgMCB9
OworICAgIHN0cnVjdCB7CisgICAgICAgIEJ1ZmZlckRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwor
ICAgICAgICB1bnNpZ25lZCBzaXplIHsgMCB9OworICAgICAgICBzdGQ6OmFycmF5PFJlZlB0cjxC
dWZmZXI+LCBjX21heEJ1ZmZlcnM+IG9iamVjdCB7IH07CisgICAgfSBtX2FycmF5OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcAppbmRleCA3MGYyMDQ3NDMxNTk4YTBjYjM4ZTRjNmQzNWM4OGE0MTU1NTliZTRh
Li5jMTM4NmNhOGU5ZTBkYTY2NmQ3ZWM1N2UxNDE3YThiZDRkYTkwOGJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMTYwLDEyICsxNjAsMTYgQEAg
c3RhdGljIHZvaWQgd2Via2l0X2RtYWJ1Zl92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0RE1B
QnVmVmlkZW9TaW5rQ2xhc3MqIGtsYXMKICAgICAgICAgIlNpbmsgU3RhdGlzdGljcyIsIEdTVF9U
WVBFX1NUUlVDVFVSRSwgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBREFCTEUg
fCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwogfQogCi12b2lkIHdlYktpdERNQUJ1ZlZpZGVv
U2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRETUFCdWZWaWRlb1NpbmsqIHNpbmssIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorYm9vbCB3ZWJLaXRETUFCdWZWaWRl
b1NpbmtJc0VuYWJsZWQoKQogewotICAgIFdlYktpdERNQUJ1ZlZpZGVvU2lua1ByaXZhdGUqIHBy
aXYgPSBzaW5rLT5wcml2OwotCi0gICAgcHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlID0gcGxheWVy
OwotICAgIHdlYktpdFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShwcml2LT5hcHBTaW5r
LmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOworICAgIHN0YXRpYyBib29sIHNfZW5h
YmxlZCA9IGZhbHNlOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX2ZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2Uoc19mbGFnLAorICAgICAgICBbJl0geworICAgICAgICAgICAgY29uc3QgY2hh
ciogdmFsdWUgPSBnX2dldGVudigiV0VCS0lUX0dTVF9ETUFCVUZfU0lOS19FTkFCTEVEIik7Cisg
ICAgICAgICAgICBzX2VuYWJsZWQgPSB2YWx1ZSAmJiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2
YWx1ZSwgInRydWUiKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiMSIpKTsKKyAg
ICAgICAgfSk7CisgICAgcmV0dXJuIHNfZW5hYmxlZDsKIH0KIAogYm9vbCB3ZWJLaXRETUFCdWZW
aWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKQEAgLTE3Myw0ICsxNzcsMTIgQEAgYm9vbCB3ZWJLaXRE
TUFCdWZWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKICAgICByZXR1cm4gaXNHU3RyZWFtZXJQbHVn
aW5BdmFpbGFibGUoImFwcCIpOwogfQogCit2b2lkIHdlYktpdERNQUJ1ZlZpZGVvU2lua1NldE1l
ZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRETUFCdWZWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIFdlYktpdERNQUJ1ZlZpZGVvU2lua1By
aXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgcHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRl
ID0gcGxheWVyOworICAgIHdlYktpdFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShwcml2
LT5hcHBTaW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOworfQorCiAjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5o
CmluZGV4IGRmMjRhNmYwZmEzN2QyMzc1NTFlNjgxNjlhY2FhNzlkN2M5OTBmZjIuLjMyOGU4Yjdl
YjljMTc3MWM5MGNmODM5ODc2NjE2NDY1ODhiN2I3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVm
VmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IF9XZWJLaXRETUFC
dWZWaWRlb1NpbmtDbGFzcyB7CiAKIEdUeXBlIHdlYmtpdF9kbWFidWZfdmlkZW9fc2lua19nZXRf
dHlwZSh2b2lkKTsKIAorYm9vbCB3ZWJLaXRETUFCdWZWaWRlb1NpbmtJc0VuYWJsZWQoKTsKIGJv
b2wgd2ViS2l0RE1BQnVmVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSgpOwogdm9pZCB3ZWJLaXRETUFC
dWZWaWRlb1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0RE1BQnVmVmlkZW9TaW5rKiwg
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggMTNjM2Y3ODU1NTRmMDNj
MmQ1OTA1YTZhOTg4ZmRiNjFlOWViNmJlZC4uMDczMTViNjJlNjBmOTIwZjJjZDMxNDRkODIyZWU2
MGVjYmU4ZjNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKQEAgLTI4LDYgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCiAKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFCdWZP
YmplY3QuaCIKKyNpbmNsdWRlICJETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJHQk1CdWZmZXJTd2FwY2hhaW4uaCIKKyNpbmNsdWRlICJHQk1EZXZpY2UuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb01peGVyLmgiCiAj
aW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCkBAIC03NSw3ICs4MCw5IEBACiAjaW5jbHVkZSAi
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxnYm0u
aD4KICNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2FsbG9jYXRvcnMvZ3N0ZG1hYnVm
Lmg+CiAjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogI2luY2x1ZGUgPGdzdC9n
c3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KQEAgLTkyLDYg
Kzk5LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAKQEAgLTExNCw2ICsxMjIsNyBAQAogI2lu
Y2x1ZGUgIkdTdHJlYW1lclZpZGVvRnJhbWVIb2xkZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlE
TUFCdWYuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wuaCIK
ICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKQEAgLTE1NSwyMyArMTY0LDI5IEBA
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2Fk
aW5nUHJvZ3Jlc3MoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9kcmF3VGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBhaW50
KQogICAgICwgbV9yZWFkeVRpbWVySGFuZGxlcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCkKLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBtX25pY29zaWFMYXllcihOaWNv
c2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQotI2Vsc2UKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpICYmICFVU0UoTklDT1NJQSkKICAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5KGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wpKQogI2VuZGlmCi0j
ZW5kaWYKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1fbG9nZ2VyKHBsYXllci0+
bWVkaWFQbGF5ZXJMb2dnZXIoKSkKICAgICAsIG1fbG9nSWRlbnRpZmllcihwbGF5ZXItPm1lZGlh
UGxheWVyTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCisgICAgLCBtX3N3YXBjaGFpbihhZG9wdFJl
ZihuZXcgR0JNQnVmZmVyU3dhcGNoYWluKEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyU3dhcGNo
YWluU2l6ZTo6RWlnaHQpKSkKIHsKICNpZiBVU0UoR0xJQikKICAgICBtX3JlYWR5VGltZXJIYW5k
bGVyLnNldFByaW9yaXR5KEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKTsKICNlbmRpZgogICAgIG1f
aXNQbGF5ZXJTaHV0dGluZ0Rvd24uc3RvcmUoZmFsc2UpOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNv
bnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
OjpjcmVhdGVGYWN0b3J5KCp0aGlzLAorICAgICAgICBbJl0oKSAtPiBSZWY8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eT4geworICAgICAgICAgICAgaWYgKHdlYktpdERNQUJ1ZlZpZGVv
U2lua0lzRW5hYmxlZCgpICYmIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTCk7CisgICAgICAgIH0oKSkpOworI2VuZGlm
CisKICAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOwogICAgIG1fYXVkaW9TaW5rID0g
Y3JlYXRlQXVkaW9TaW5rKCk7CiAKQEAgLTI4NjcsNyArMjg4Miw3IEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwZXJmb3JtVGFza0F0TWVkaWFUaW1lKEZ1bmN0aW9uPHZvaWQo
KT4mJiB0YXNrCiBQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBtX25p
Y29zaWFMYXllci5wdHIoKTsKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CiAjZWxz
ZQogICAgIHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcio+KHRo
aXMpOwogI2VuZGlmCkBAIC0yOTc5LDYgKzI5OTQsMjMxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpCiAgICAgcHJveHlPcGVyYXRp
b24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKICNlbmRpZgogfQorCisvLyBHU3RyZWFtZXIncyBn
c3RfdmlkZW9fZm9ybWF0X3RvX2ZvdXJjYygpIGRvZXNuJ3QgY292ZXIgUkdCLWxpa2UgZm9ybWF0
cywgc28gd2UKKy8vIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIEZvdXJDQyB2YWx1ZXMgZm9yIHRo
b3NlIHRocm91Z2ggdGhpcyBmdW5jaW9uLgorc3RhdGljIHVpbnQzMl90IGZvdXJjY1ZhbHVlKEdz
dFZpZGVvRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2Ug
R1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9y
bWF0OjpGb3VyQ0M6OlhCR1I4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoK
KyAgICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4OCk7
CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6CisgICAgICAgIHJldHVybiB1aW50MzJf
dChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSWDg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVPX0ZP
Uk1BVF94QkdSOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OlJHQlg4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKKyAgICAgICAgcmV0
dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4OCk7CisgICAgY2FzZSBH
U1RfVklERU9fRk9STUFUX0JHUkE6CisgICAgICAgIHJldHVybiB1aW50MzJfdChETUFCdWZGb3Jt
YXQ6OkZvdXJDQzo6QVJHQjg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgor
ICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkJHUkE4ODg4KTsK
KyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKKyAgICAgICAgcmV0dXJuIHVpbnQzMl90
KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpSR0JBODg4OCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGdzdF92aWRlb19mb3JtYXRfdG9fZm91cmNjKGZv
cm1hdCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoRE1BQnVm
VG9Db21wb3NpdG9yKCkKK3sKKyAgICBMb2NrZXIgc2FtcGxlTG9ja2VyIHsgbV9zYW1wbGVNdXRl
eCB9OworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8qIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdl
dCgpKTsKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFZpZGVvSW5m
byB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmdmlkZW9JbmZvKTsKKyAgICBp
ZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2Ft
cGxlLmdldCgpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX21ldGEoYnVmZmVyKTsKKyAgICBpZiAobWV0
YSkgeworICAgICAgICBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKSA9IG1ldGEtPndp
ZHRoOworICAgICAgICBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbykgPSBtZXRhLT5o
ZWlnaHQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1ldGEtPm5fcGxhbmVz
OyArK2kpIHsKKyAgICAgICAgICAgIEdTVF9WSURFT19JTkZPX1BMQU5FX09GRlNFVCgmdmlkZW9J
bmZvLCBpKSA9IG1ldGEtPm9mZnNldFtpXTsKKyAgICAgICAgICAgIEdTVF9WSURFT19JTkZPX1BM
QU5FX1NUUklERSgmdmlkZW9JbmZvLCBpKSA9IG1ldGEtPnN0cmlkZVtpXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGF1dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVy
VGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCk7CisgICAg
QVNTRVJUKGlzPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KHByb3h5KSk7
CisKKyAgICBhdXRvKiBmZWF0dXJlcyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlcyhjYXBzLCAwKTsK
KyAgICBpZiAoZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMoZmVhdHVyZXMsIEdTVF9DQVBTX0ZF
QVRVUkVfTUVNT1JZX0RNQUJVRikpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBvZiBhIGhhcmR3YXJl
IGRlY29kZXIgdGhhdCdzIHlpZWxkaW5nIGRtYWJ1ZiBtZW1vcnksIHdlIGNhbiB0YWtlIHRoZSBy
ZWxldmFudCBkYXRhIGFuZAorICAgICAgICAvLyBwdXNoIGl0IGludG8gdGhlIGNvbXBvc2l0aW9u
IHByb2Nlc3MuCisKKyAgICAgICAgKyttX3NhbXBsZUNvdW50OworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgcHJveHkubG9jaygpIH07CisgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBQcm92aWRlIHRoZSBETUFCdWZPYmplY3Qg
d2l0aCBhIHJlbGV2YW50IGhhbmRsZSAobWVtb3J5IGFkZHJlc3MpLiBXaGVuIHByb3ZpZGVkIGZv
ciB0aGUgZmlyc3QgdGltZSwKKyAgICAgICAgLy8gdGhlIGxhbWJkYSB3aWxsIGJlIGludm9rZWQg
YW5kIGFsbCBkbWFidWYgZGF0YSBpcyBmaWxsZWQgaW4uCisgICAgICAgIGRvd25jYXN0PFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KHByb3h5KS5wdXNoRE1BQnVmKAorICAg
ICAgICAgICAgRE1BQnVmT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihnc3RfYnVm
ZmVyX3BlZWtfbWVtb3J5KGJ1ZmZlciwgMCkpKSwKKyAgICAgICAgICAgIFsmXShhdXRvJiYgb2Jq
ZWN0KSB7CisgICAgICAgICAgICAgICAgb2JqZWN0LmZvcm1hdCA9IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlKGZvdXJjY1ZhbHVlKEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKSkpOworICAg
ICAgICAgICAgICAgIG9iamVjdC53aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0lu
Zm8pOworICAgICAgICAgICAgICAgIG9iamVjdC5oZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlH
SFQoJnZpZGVvSW5mbyk7CisKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiByZWxlYXNlIG1lY2hh
bmlzbSBmb3IgYSBkZWNvZGVyLXByb3ZpZGVkIGRtYWJ1ZiBpcyBhIGJpdCB0cmlja3kuIFRoZSBk
bWFidWYgb2JqZWN0CisgICAgICAgICAgICAgICAgLy8gaXRzZWxmIGRvZXNuJ3QgcHJvdmlkZSBh
bnl0aGluZyB1c2VmdWwsIGJ1dCB0aGUgZGVjb2RlciB3b24ndCByZXVzZSB0aGUgZG1hYnVmIHVu
dGlsIHRoZQorICAgICAgICAgICAgICAgIC8vIHJlbGV2YW50IEdzdFNhbXBsZSByZWZlcmVuY2Ug
aXMgZHJvcHBlZCBieSB0aGUgZG93bnN0cmVhbSBwaXBlbGluZS4gU28gZm9yIHRoaXMgdG8gd29y
aywKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIGEgbmVlZCB0byBzb21laG93IGFzc29jaWF0
ZSB0aGUgR3N0U2FtcGxlIHJlZmVyZW5jZSB3aXRoIHRoaXMgcmVsZWFzZSBmbGFnIHNvIHRoYXQK
KyAgICAgICAgICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQgb25jZSB0aGUgcmVs
ZWFzZSBmbGFnIGlzIHNpZ25hbGxlZC4gVGhlcmUncyB3YXlzIHRvIGFjaGlldmUgdGhhdCwKKyAg
ICAgICAgICAgICAgICAvLyBidXQgbGVmdCBmb3IgbGF0ZXIuCisgICAgICAgICAgICAgICAgb2Jq
ZWN0LnJlbGVhc2VGbGFnID0gRE1BQnVmUmVsZWFzZUZsYWcgeyB9OworCisgICAgICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggcGxhbmUsIHRoZSByZWxldmFudCBkYXRhIChzdHJpZGUsIG9mZnNldCwg
c2tpcCwgZG1hYnVmIGZkKSBpcyByZXRyaWV2ZWQgYW5kIGFzc2lnbmVkCisgICAgICAgICAgICAg
ICAgLy8gYXMgYXBwcm9wcmlhdGUuIE1vZGlmaWVyIHZhbHVlcyBhcmUgemVyb2VkIG91dCBmb3Ig
bm93LCBzaW5jZSBHU3RyZWFtZXIgZG9lc24ndCB5ZXQgcHJvdmlkZQorICAgICAgICAgICAgICAg
IC8vIHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBnc2l6ZSBvZmZzZXQgPSBHU1RfVklERU9fSU5GT19QTEFORV9PRkZTRVQoJnZpZGVvSW5mbywg
aSk7CisgICAgICAgICAgICAgICAgICAgIGd1aW50IG1lbWlkID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgZ3VpbnQgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ3NpemUgc2tpcCA9
IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5KGJ1ZmZl
ciwgb2Zmc2V0LCAxLCAmbWVtaWQsICZsZW5ndGgsICZza2lwKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIG1lbWlk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mZFtpXSA9IGR1cENsb3NlT25FeGVj
KGdzdF9kbWFidWZfbWVtb3J5X2dldF9mZChtZW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldCA9IG1lbS0+b2Zmc2V0ICsgc2tpcDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmRbaV0gPSAtMTsKKworICAgICAgICAg
ICAgICAgICAgICBnaW50IGNvbXBbR1NUX1ZJREVPX01BWF9DT01QT05FTlRTXTsKKyAgICAgICAg
ICAgICAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9pbmZvX2NvbXBvbmVudCh2aWRlb0luZm8uZmlu
Zm8sIGksIGNvbXApOworICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2Zmc2V0W2ldID0gb2Zm
c2V0OworICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RyaWRlW2ldID0gR1NUX1ZJREVPX0lO
Rk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8sIGkpOworICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QubW9kaWZpZXJbaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgZGVjb2RlciBpcyBleHBvcnRpbmcgcmF3IG1lbW9yeSwgd2UgaGF2ZSB0
byB1c2UgdGhlIHN3YXBjaGFpbiB0byBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBidWZmZXJzCisgICAg
Ly8gYW5kIGNvcHkgb3ZlciB0aGUgZGF0YSBmb3IgZWFjaCBwbGFuZS4KKyAgICBHQk1CdWZmZXJT
d2FwY2hhaW46OkJ1ZmZlckRlc2NyaXB0aW9uIGJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAgICAgICAg
RE1BQnVmRm9ybWF0OjpjcmVhdGUoZm91cmNjVmFsdWUoR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2
aWRlb0luZm8pKSksCisgICAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pLCBH
U1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyksCisgICAgfTsKKyAgICBpZiAoYnVmZmVy
RGVzY3JpcHRpb24uZm9ybWF0LmZvdXJjYyA9PSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6SW52YWxp
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzd2FwY2hhaW5CdWZmZXIgPSBtX3N3YXBj
aGFpbi0+Z2V0QnVmZmVyKGJ1ZmZlckRlc2NyaXB0aW9uKTsKKworICAgIC8vIFNvdXJjZSBoZWxw
ZXIgc3RydWN0LCBtYXBzIHRoZSByYXcgbWVtb3J5IGFuZCBleHBvc2VzIHRoZSBtYXBwZWQgZGF0
YSBmb3IgY29weWluZy4KKyAgICBzdHJ1Y3QgU291cmNlIHsKKyAgICAgICAgU291cmNlKEdzdE1l
bW9yeSogbWVtb3J5LCBnc2l6ZSBvZmZzZXQsIHVpbnQzMl90IHN0cmlkZSwgdWludDMyX3QgaGVp
Z2h0KQorICAgICAgICAgICAgOiBtZW1vcnkobWVtb3J5KQorICAgICAgICAgICAgLCBzdHJpZGUo
c3RyaWRlKQorICAgICAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIWdzdF9tZW1vcnlfbWFwKG1lbW9yeSwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB2YWxpZCA9IHRydWU7Cisg
ICAgICAgICAgICBkYXRhID0gJm1hcEluZm8uZGF0YVtvZmZzZXRdOworICAgICAgICB9CisKKyAg
ICAgICAgflNvdXJjZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAg
ICAgICAgICAgICBnc3RfbWVtb3J5X3VubWFwKG1lbW9yeSwgJm1hcEluZm8pOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCB2YWxpZCB7IGZhbHNlIH07CisgICAgICAgIEdzdE1lbW9yeSogbWVt
b3J5IHsgbnVsbHB0ciB9OworICAgICAgICBHc3RNYXBJbmZvIG1hcEluZm87CisgICAgICAgIHVp
bnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAgIHVpbnQzMl90IHN0cmlkZSB7IDAgfTsK
KyAgICAgICAgdWludDMyX3QgaGVpZ2h0IHsgMCB9OworICAgIH07CisKKyAgICAvLyBEZXN0aW5h
dGlvbiBoZWxwZXIgc3RydWN0LCBtYXBzIHRoZSBnYm1fYm8gb2JqZWN0IGludG8gQ1BVLW1lbW9y
eSBzcGFjZSBhbmQgY29waWVzIGZyb20gdGhlIGFjY29tcGFueWluZyBTb3VyY2UgaW4gZmlsbCgp
LgorICAgIHN0cnVjdCBEZXN0aW5hdGlvbiB7CisgICAgICAgIERlc3RpbmF0aW9uKHN0cnVjdCBn
Ym1fYm8qIGJvLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQorICAgICAgICAgICAg
OiBibyhibykKKyAgICAgICAgeworICAgICAgICAgICAgbWFwID0gZ2JtX2JvX21hcChibywgMCwg
MCwgd2lkdGgsIGhlaWdodCwgR0JNX0JPX1RSQU5TRkVSX1dSSVRFLCAmc3RyaWRlLCAmbWFwRGF0
YSk7CisgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIGRhdGEgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtYXApOworICAgICAgICB9CisKKyAgICAgICAgfkRlc3RpbmF0aW9uKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgICAgIGdibV9i
b191bm1hcChibywgbWFwRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbGwoY29u
c3QgU291cmNlJiBzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodWludDMyX3Qg
eSA9IDA7IHkgPCBzb3VyY2UuaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBz
b3VyY2VEYXRhID0gJnNvdXJjZS5kYXRhW3kgKiBzb3VyY2Uuc3RyaWRlXTsKKyAgICAgICAgICAg
ICAgICBhdXRvKiBkZXN0aW5hdGlvbkRhdGEgPSAmZGF0YVt5ICogc3RyaWRlXTsKKyAgICAgICAg
ICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25EYXRhLCBzb3VyY2VEYXRhLCBzdGQ6Om1pbihzb3Vy
Y2Uuc3RyaWRlLCBzdHJpZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgdmFsaWQgeyBmYWxzZSB9OworICAgICAgICBzdHJ1Y3QgZ2JtX2JvKiBibyB7IG51bGxw
dHIgfTsKKyAgICAgICAgdm9pZCogbWFwIHsgbnVsbHB0ciB9OworICAgICAgICB2b2lkKiBtYXBE
YXRhIHsgbnVsbHB0ciB9OworICAgICAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworICAg
ICAgICB1aW50MzJfdCBzdHJpZGUgeyAwIH07CisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmdmlkZW9JbmZvKTsgKytpKSB7Cisg
ICAgICAgIGdpbnQgY29tcFtHU1RfVklERU9fTUFYX0NPTVBPTkVOVFNdOworICAgICAgICBnc3Rf
dmlkZW9fZm9ybWF0X2luZm9fY29tcG9uZW50KHZpZGVvSW5mby5maW5mbywgaSwgY29tcCk7CisK
KyAgICAgICAgYXV0byYgcGxhbmVEYXRhID0gc3dhcGNoYWluQnVmZmVyLT5wbGFuZURhdGEoaSk7
CisgICAgICAgIGdzaXplIG9mZnNldCA9IEdTVF9WSURFT19JTkZPX1BMQU5FX09GRlNFVCgmdmlk
ZW9JbmZvLCBpKTsKKyAgICAgICAgZ3VpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVf
U1RSSURFKCZ2aWRlb0luZm8sIGkpOworCisgICAgICAgIGd1aW50IG1lbWlkLCBsZW5ndGg7Cisg
ICAgICAgIGdzaXplIHNraXA7CisgICAgICAgIGlmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5KGJ1
ZmZlciwgb2Zmc2V0LCAxLCAmbWVtaWQsICZsZW5ndGgsICZza2lwKSkgeworICAgICAgICAgICAg
YXV0byogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIG1lbWlkKTsKKworICAg
ICAgICAgICAgU291cmNlIHNvdXJjZShtZW0sIG9mZnNldCwgc3RyaWRlLCBwbGFuZURhdGEuaGVp
Z2h0KTsKKyAgICAgICAgICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKHBsYW5lRGF0YS5ibywg
cGxhbmVEYXRhLndpZHRoLCBwbGFuZURhdGEuaGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKHNv
dXJjZS52YWxpZCAmJiBkZXN0aW5hdGlvbi52YWxpZCkKKyAgICAgICAgICAgICAgICBkZXN0aW5h
dGlvbi5maWxsKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICArK21fc2FtcGxlQ291
bnQ7CisgICAgTG9ja2VyIGxvY2tlciB7IHByb3h5LmxvY2soKSB9OworICAgIGlmICghcHJveHku
aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHVwZGF0ZWQgYnVmZmVy
IGlzIHB1c2hlZCBpbnRvIHRoZSBjb21wb3NpdGlvbiBzdGFnZS4gVGhlIERNQUJ1Zk9iamVjdCBo
YW5kbGUgdXNlcyB0aGUgc3dhcGNoYWluIGFkZHJlc3MgYXMgdGhlIGhhbmRsZSBiYXNlLgorICAg
IC8vIFdoZW4gdGhlIGJ1ZmZlciBpcyBwdXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUgbGFt
YmRhIHdpbGwgYmUgaW52b2tlZCB0byByZXRyaWV2ZSBhIG1vcmUgY29tcGxldGUgRE1BQnVmT2Jq
ZWN0IGZvciB0aGUKKyAgICAvLyBnaXZlbiBHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlciBvYmpl
Y3QuCisgICAgZG93bmNhc3Q8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zj4o
cHJveHkpLnB1c2hETUFCdWYoCisgICAgICAgIERNQUJ1Zk9iamVjdChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obV9zd2FwY2hhaW4uZ2V0KCkpICsgc3dhcGNoYWluQnVmZmVyLT5oYW5kbGUo
KSksCisgICAgICAgIFsmXShhdXRvJiYgb2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gc3dh
cGNoYWluQnVmZmVyLT5jcmVhdGVETUFCdWZPYmplY3Qob2JqZWN0LmhhbmRsZSk7CisgICAgICAg
IH0pOworfQogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQoKQpAQCAtMzE4NSw4ICszNDI1LDE2IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUq
IHNhbXBsZSkKICNlbmRpZgogICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
ICAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQobV9kcmF3TG9jayk7Ci0gICAgfSBlbHNlCisg
ICAgfSBlbHNlIHsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgaWYgKGlzPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKSkgewor
ICAgICAgICAgICAgcHVzaERNQUJ1ZlRvQ29tcG9zaXRvcigpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigp
OworICAgIH0KICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiB9CiAKQEAgLTM0MjYs
NiArMzY3NCwyMSBAQCBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUoKSBjb25zdAogICAgIHJldHVybiBNZWRpYVBsYXll
cjo6TW92aWVMb2FkVHlwZTo6RG93bmxvYWQ7CiB9CiAKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rRE1BQnVmKCkKK3sKKyAgICBpZiAoIXdl
YktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAoIXdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKSkgeworICAgICAg
ICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIHRoZSBETUFCdWYgdmlkZW8g
c2luayBkZXBlbmRlbmNpZXMuIEhhcmR3YXJlLWFjY2VsZXJhdGVkIHplcm8tY29weSB2aWRlbyBy
ZW5kZXJpbmcgd29uJ3QgYmUgYWNoaWV2YWJsZSB3aXRoIHRoaXMgcGx1Z2luLiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBzaW5rID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJraXRkbWFidWZ2aWRlb3NpbmsiLCBudWxscHRyKTsKKyAg
ICBBU1NFUlQoc2luayk7CisgICAgd2ViS2l0RE1BQnVmVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQ
cml2YXRlKFdFQktJVF9ETUFCVUZfVklERU9fU0lOSyhzaW5rKSwgdGhpcyk7CisgICAgcmV0dXJu
IHNpbms7Cit9CisKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQogR3N0RWxlbWVudCogTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmtHTCgpCiB7CkBAIC0zNTE3LDggKzM3
ODAsMTAgQEAgR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmsoKQogICAgIHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsKICNlbmRpZgogCisgICAg
aWYgKCFtX3ZpZGVvU2luayAmJiBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpCisgICAgICAg
IG1fdmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5rRE1BQnVmKCk7CiAjaWYgVVNFKEdTVFJFQU1F
Ul9HTCkKLSAgICBpZiAobV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQorICAgIGlmICghbV92
aWRlb1NpbmsgJiYgbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQogICAgICAgICBtX3ZpZGVv
U2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGUzODA3NWIyZmMyNmQ5NDNiZjlhMDA2
NTQzM2M3YmJhYWU1ZTA2MjMuLjY0ZjA1OWNkZDFhZjI2NGZmNDZkNmMwMDliOGFjYmY2NWMzMWVi
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAg
LTEwNSw2ICsxMDUsOCBAQCBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOwog
Y2xhc3MgTWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2s7CiBj
bGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjsKIAorY2xhc3MgR0JNQnVmZmVyU3dhcGNo
YWluOworCiB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKIAogLy8gVXNl
IGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY29u
c3RydWN0IFdlYWtQdHJzIG9uIGFub3RoZXIgdGhyZWFkLgpAQCAtMjY3LDEyICsyNjksMTQgQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgc2hvdWxkSWdub3JlSW50cmluc2ljU2l6ZSgpIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5r
RE1BQnVmKCk7CiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBHc3RFbGVtZW50KiBjcmVhdGVW
aWRlb1NpbmtHTCgpOwogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAg
dm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOworICAgIHZvaWQgcHVzaERNQUJ1ZlRvQ29t
cG9zaXRvcigpOwogI2lmIFVTRShOSUNPU0lBKQogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpIGZpbmFsOwogI2Vsc2UKQEAgLTUwOCw3ICs1MTIsNyBAQCBwcml2YXRlOgogICAgIFJ1bkxv
b3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9yZWFkeVRpbWVySGFuZGxl
cjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVm
PE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisgICAgUmVmUHRyPE5pY29z
aWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CiAjZWxzZQogICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNlbmRp
ZgpAQCAtNTczLDYgKzU3Nyw4IEBAIHByaXZhdGU6CiAgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9s
b2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOwogI2VuZGlmCisKKyAgICBS
ZWZQdHI8R0JNQnVmZmVyU3dhcGNoYWluPiBtX3N3YXBjaGFpbjsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGwuY3BwCmluZGV4IDAyMjg0NGIzMjY3MDQ1M2M2Y2M3NzU1NDRjMjk2YjVkNjA4M2M0
ZTkuLjkyMzc1ZTkyMDEyMjE3OWQ4MzVlYTUxZTFmMDY2MGFlMGIxMGZiYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmNwcApAQCAtMzEsMTUgKzMxLDIxIEBACiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiAKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMLmgiCiAKIG5hbWVz
cGFjZSBOaWNvc2lhIHsKIAogYXV0byBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3Jl
YXRlRmFjdG9yeShDbGllbnQmIGNsaWVudCkgLT4gRmFjdG9yeQoreworICAgIHJldHVybiBjcmVh
dGVGYWN0b3J5KGNsaWVudCwgYWRvcHRSZWYoKm5ldyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5R0wpKTsKK30KKworYXV0byBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeShDbGllbnQmIGNsaWVudCwgUmVmPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+JiYgcHJveHkpIC0+IEZhY3RvcnkKIHsKICAgICByZXR1
cm4gRmFjdG9yeSgKLSAgICAgICAgWyZjbGllbnRdKENvbnRlbnRMYXllciYpIHsKLSAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihjbGll
bnQsIGFkb3B0UmVmKCpuZXcgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eUdMKSk7CisgICAgICAgIFsmY2xpZW50LCBwcm94eSA9IFdURk1vdmUocHJveHkpXShDb250ZW50
TGF5ZXImKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihjbGllbnQsIFdURk1vdmUocHJveHkpKTsKICAgICAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgKaW5kZXggOTdlMzA1OTEzY2M4NDI2YjM3YjgzN2M0
ZDNlNjlkYTdlM2IzMDc2Yi4uNTkzNjk3NTAyNWJkYjg0MmM0OWJkMzc3ZDMzMGI5NjEwYjQyYTI5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIH07
CiAKICAgICBzdGF0aWMgRmFjdG9yeSBjcmVhdGVGYWN0b3J5KENsaWVudCYpOworICAgIHN0YXRp
YyBGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoQ2xpZW50JiwgUmVmPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+JiYpOwogCiAgICAgZXhwbGljaXQgQ29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGwoQ2xpZW50JiwgUmVmPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+JiYpOwogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhiYWY4OGE0NDI2M2YzNTc3NTExZTM5MWRhOTgw
MWJlZjE0YzA0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcApA
QCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNs
dWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJzLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckxheWVyLmgiCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVw
b3h5RUdMLmgiCisjZWxzZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWds
ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUEZORUdMQ1JF
QVRFSU1BR0VLSFJQUk9DIGNyZWF0ZUltYWdlS0hSKCkKK3sKKyAgICBzdGF0aWMgUEZORUdMQ1JF
QVRFSU1BR0VLSFJQUk9DIHNfY3JlYXRlSW1hZ2VLSFI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIHNfZmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzX2ZsYWcsCisgICAgICAgIFsmXSB7Cisg
ICAgICAgICAgICBzX2NyZWF0ZUltYWdlS0hSID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xDUkVB
VEVJTUFHRUtIUlBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJlZ2xDcmVhdGVJbWFnZUtIUiIpKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuIHNfY3JlYXRlSW1hZ2VLSFI7Cit9CisKK3N0YXRpYyBQ
Rk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DIGRlc3Ryb3lJbWFnZUtIUigpCit7CisgICAgc3RhdGlj
IFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0Mgc19kZXN0cm95SW1hZ2VLSFI7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIHNfZmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzX2ZsYWcsCisgICAg
ICAgIFsmXSB7CisgICAgICAgICAgICBzX2Rlc3Ryb3lJbWFnZUtIUiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImVnbERlc3Ry
b3lJbWFnZUtIUiIpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHNfZGVzdHJveUltYWdlS0hS
OworfQorCitzdHJ1Y3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1B
QnVmTGF5ZXI6OkVHTEltYWdlRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOworCisgICAgfkVHTEltYWdlRGF0YSgpCisgICAgeworICAgICAgICBpZiAobnVtSW1hZ2Vz
KSB7CisgICAgICAgICAgICBnbERlbGV0ZVRleHR1cmVzKG51bUltYWdlcywgdGV4dHVyZS5kYXRh
KCkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSW1hZ2VzOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2VbaV0gIT0gRUdMX05PX0lNQUdFX0tIUikK
KyAgICAgICAgICAgICAgICAgICAgZGVzdHJveUltYWdlS0hSKCkoUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5lZ2xEaXNwbGF5KCksIGltYWdlW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IHdpZHRoIHsgMCB9
OworICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICB1bnNpZ25lZCBudW1JbWFnZXMgeyAw
IH07CisgICAgc3RkOjphcnJheTxHTHVpbnQsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IHRl
eHR1cmUgeyAwLCAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTxFR0xJbWFnZUtIUiwgRE1BQnVm
Rm9ybWF0OjpjX21heFBsYW5lcz4gaW1hZ2UgeyBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1B
R0VfS0hSLCBFR0xfTk9fSU1BR0VfS0hSLCBFR0xfTk9fSU1BR0VfS0hSIH07Cit9OworCitUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5RE1BQnVmKCkgPSBkZWZhdWx0OworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zjo6flRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRl
ZmF1bHQ7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6YWN0
aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqIGNvbXBvc2l0b3IsIFRleHR1cmVN
YXBwZXJMYXllciogdGFyZ2V0TGF5ZXIpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICghbV9j
b21wb3NpdG9yVGhyZWFkKQorICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWQgPSAmVGhyZWFkOjpj
dXJyZW50KCk7CisjZW5kaWYKKyAgICBBU1NFUlQobV9jb21wb3NpdG9yVGhyZWFkID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNvbXBvc2l0b3IpOworICAgIEFTU0VSVCh0YXJn
ZXRMYXllcik7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAg
ICAgICAgbV9jb21wb3NpdG9yID0gY29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9
IHRhcmdldExheWVyOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CisKKyAgICBtX3BlbmRpbmdMYXllciA9IG51bGxwdHI7CisgICAgbV9jb21taXR0ZWRMYXll
ciA9IG51bGxwdHI7CisgICAgbV9sYXllcnMgPSB7IH07CisKKyAgICBtX2NvbXBvc2l0b3IgPSBu
dWxscHRyOworICAgIG1fdGFyZ2V0TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OnN3YXBCdWZmZXIoKQoreworICAgIExvY2tl
ciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICBpZiAoIW1fdGFyZ2V0TGF5ZXIgfHwgIW1fcGVuZGlu
Z0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3VzTGF5ZXIgPSBXVEZN
b3ZlKG1fY29tbWl0dGVkTGF5ZXIpOworICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBXVEZNb3ZlKG1f
cGVuZGluZ0xheWVyKTsKKyAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY29t
bWl0dGVkTGF5ZXIuZ2V0KCkpOworCisgICAgLy8gVGhlIHByZXZpb3VzIGFuZCBqdXN0LWNvbW1p
dHRlZCBsYXllcnMgc2hvdWxkbid0IGJlIHRoZSBzYW1lLiBCdXQgaWYgdGhleSBhcmUsIGRvbid0
IHBlcmZvcm0gYSByZWxlYXNlLgorICAgIEFTU0VSVCghcHJldmlvdXNMYXllciB8fCBwcmV2aW91
c0xheWVyICE9IG1fY29tbWl0dGVkTGF5ZXIpOworICAgIGlmIChwcmV2aW91c0xheWVyICYmIHBy
ZXZpb3VzTGF5ZXIgIT0gbV9jb21taXR0ZWRMYXllcikKKyAgICAgICAgcHJldmlvdXNMYXllci0+
cmVsZWFzZSgpOworCisgICAgaWYgKCFtX2NvbW1pdHRlZExheWVyLT5tX2ltYWdlRGF0YSkKKyAg
ICAgICAgbV9jb21taXR0ZWRMYXllci0+bV9pbWFnZURhdGEgPSBETUFCdWZMYXllcjo6Y3JlYXRl
RUdMSW1hZ2VEYXRhKG1fY29tbWl0dGVkTGF5ZXItPm1fb2JqZWN0KTsKKyAgICBtX2NvbW1pdHRl
ZExheWVyLT5tX2FnZSA9IDA7CisKKyAgICAvLyBSZW1vdmUgYW55IHN0YWxlIGxheWVycywgZS5n
LiBpZiBhIGxheWVyIGhhcyBnb25lIHVudXNlZCBmb3IgPmNfbWF4aW11bUFnZSBzd2FwcyBvciBk
b2Vzbid0IG1hdGNoIHRoZSBsYXRlc3Qgc2l6ZS4KKyAgICBhdXRvJiBjb21taXR0ZWRPYmplY3Qg
PSBtX2NvbW1pdHRlZExheWVyLT5tX29iamVjdDsKKyAgICBhdXRvIGlzU3RhbGVMYXllciA9Cisg
ICAgICAgIFsmXShhdXRvJiBpdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgbGF5ZXIg
PSBpdC52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsYXllci5tX2FnZSA+IERNQUJ1
ZkxheWVyOjpjX21heGltdW1BZ2UKKyAgICAgICAgICAgICAgICB8fCAhKGxheWVyLm1fb2JqZWN0
LndpZHRoID09IGNvbW1pdHRlZE9iamVjdC53aWR0aCAmJiBsYXllci5tX29iamVjdC5oZWlnaHQg
PT0gY29tbWl0dGVkT2JqZWN0LmhlaWdodCk7CisgICAgICAgIH07CisKKyAgICBib29sIGhhc1N0
YWxlTGF5ZXJzID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGl0ID0gbV9sYXllcnMuYmVnaW4oKTsg
aXQgIT0gbV9sYXllcnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgKytpdC0+dmFsdWUtPm1fYWdl
OworICAgICAgICBoYXNTdGFsZUxheWVycyB8PSBpc1N0YWxlTGF5ZXIoKml0KTsKKyAgICB9CisK
KyAgICBpZiAoaGFzU3RhbGVMYXllcnMpCisgICAgICAgIG1fbGF5ZXJzLnJlbW92ZUlmKGlzU3Rh
bGVMYXllcik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1
Zjo6cHVzaERNQUJ1ZihSZWY8RE1BQnVmTGF5ZXI+JiYgZG1hYnVmTGF5ZXIpCit7CisgICAgQVNT
RVJUKG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICAvLyBUaGUgcGVuZGluZyBhbmQganVzdC1wdXNo
ZWQgbGF5ZXJzIHNob3VsZG4ndCBiZSB0aGUgc2FtZS4gQnV0IGlmIHRoZXkgYXJlLCBkb24ndCBw
ZXJmb3JtIGEgcmVsZWFzZS4KKyAgICBBU1NFUlQoIW1fcGVuZGluZ0xheWVyIHx8IG1fcGVuZGlu
Z0xheWVyICE9IGRtYWJ1ZkxheWVyLnB0cigpKTsKKyAgICBpZiAobV9wZW5kaW5nTGF5ZXIgJiYg
bV9wZW5kaW5nTGF5ZXIgIT0gZG1hYnVmTGF5ZXIucHRyKCkpCisgICAgICAgIG1fcGVuZGluZ0xh
eWVyLT5yZWxlYXNlKCk7CisKKyAgICBtX3BlbmRpbmdMYXllciA9IFdURk1vdmUoZG1hYnVmTGF5
ZXIpOworICAgIGlmIChtX2NvbXBvc2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvci0+b25OZXdC
dWZmZXJBdmFpbGFibGUoKTsKK30KKworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1Zjo6RE1BQnVmTGF5ZXI6OkRNQUJ1ZkxheWVyKERNQUJ1Zk9iamVjdCYmIG9iamVjdCwgVGV4
dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncykKKyAgICA6IG1fb2JqZWN0KFdURk1vdmUob2JqZWN0
KSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCit7IH0KKworVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6On5ETUFCdWZMYXllcigpID0gZGVmYXVsdDsKKwor
dm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICghbV9pbWFnZURhdGEpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRPRE86IHRoaXMgaXMgdGhlIEJULjYwMSBjb2xvcnNwYWNl
IGNvbnZlcnNpb24gbWF0cml4LiBUaGUgZXhhY3QgZGVzaXJlZCBjb2xvcnNwYWNlIHNob3VsZCBi
ZSBpbmNsdWRlZAorICAgIC8vIGluIHRoZSBETUFCdWZPYmplY3QsIGFuZCB0aGUgcmVsZXZhbnQg
bWF0cml4IGRlY2lkZWQgYmFzZWQgb24gaXQuIEJULjYwMSBzaG91bGQgcmVtYWluIHRoZSBkZWZh
dWx0LgorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxHTGZsb2F0LCA5PiBzX3l1dlRv
UkdCIHsKKyAgICAgICAgMS4xNjRmLCAgMC4wZiwgICAgMS41OTZmLAorICAgICAgICAxLjE2NGYs
IC0wLjM5MWYsIC0wLjgxM2YsCisgICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAuMGYKKyAgICB9
OworCisgICAgVGV4dHVyZU1hcHBlckdMJiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpOworICAgIGF1dG8mIGRhdGEgPSAqbV9pbWFnZURhdGE7
CisKKyAgICBzd2l0Y2ggKG1fb2JqZWN0LmZvcm1hdC5mb3VyY2MpIHsKKyAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpYUkdCODg4ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpYQkdSODg4ODoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4ODoKKyAg
ICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBQkdSODg4ODoKKyAgICAgICAgdGV4bWFwR0wu
ZHJhd1RleHR1cmUoZGF0YS50ZXh0dXJlWzBdLCBtX2ZsYWdzLCBJbnRTaXplKGRhdGEud2lkdGgs
IGRhdGEuaGVpZ2h0KSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6STQyMDoKKyAgICBj
YXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDQ0OgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpG
b3VyQ0M6Olk0MUI6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQyQjoKKyAgICAg
ICAgdGV4bWFwR0wuZHJhd1RleHR1cmVQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQsIDM+IHsg
ZGF0YS50ZXh0dXJlWzBdLCBkYXRhLnRleHR1cmVbMV0sIGRhdGEudGV4dHVyZVsyXSB9LAorICAg
ICAgICAgICAgc195dXZUb1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhl
aWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgc3RkOjpudWxsb3B0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVYxMjoK
KyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmVQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQs
IDM+IHsgZGF0YS50ZXh0dXJlWzBdLCBkYXRhLnRleHR1cmVbMl0sIGRhdGEudGV4dHVyZVsxXSB9
LAorICAgICAgICAgICAgc195dXZUb1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBk
YXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgc3RkOjpu
dWxsb3B0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
QTQyMDoKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmVQbGFuYXJZVVYoc3RkOjphcnJheTxH
THVpbnQsIDM+IHsgZGF0YS50ZXh0dXJlWzBdLCBkYXRhLnRleHR1cmVbMV0sIGRhdGEudGV4dHVy
ZVsyXSB9LAorICAgICAgICAgICAgc195dXZUb1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndp
ZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
ZGF0YS50ZXh0dXJlWzNdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6TlYxMjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxOgorICAg
ICAgICB0ZXhtYXBHTC5kcmF3VGV4dHVyZVNlbWlQbGFuYXJZVVYoc3RkOjphcnJheTxHTHVpbnQs
IDI+IHsgZGF0YS50ZXh0dXJlWzBdLCBkYXRhLnRleHR1cmVbMV0gfSwKKyAgICAgICAgICAgICht
X29iamVjdC5mb3JtYXQuZm91cmNjID09IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxKSwKKyAg
ICAgICAgICAgIHNfeXV2VG9SR0IsIG1fZmxhZ3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5o
ZWlnaHQpLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVVkyOgorICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OlVZVlk6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
VlVZQToKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVllVOgorICAgICAgICB0ZXht
YXBHTC5kcmF3VGV4dHVyZVBhY2tlZFlVVihkYXRhLnRleHR1cmVbMF0sCisgICAgICAgICAgICBz
X3l1dlRvUkdCLCBtX2ZsYWdzLCBJbnRTaXplKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFy
Z2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdl
RGF0YT4gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6
OmNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmIG9iamVjdCkKK3sKKyAgICB1c2luZyBF
R0xJbWFnZURhdGEgPSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFC
dWZMYXllcjo6RUdMSW1hZ2VEYXRhOworCisgICAgRUdMRGlzcGxheSBlZ2xEaXNwbGF5ID0gUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5lZ2xEaXNwbGF5KCk7
CisKKyAgICBFR0xJbWFnZUtIUiBpbWFnZVtETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzXTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2JqZWN0LmZvcm1hdC5udW1QbGFuZXM7ICsraSkg
eworICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8RUdMaW50PiBhdHRyaWJ1dGVzIHsKKyAg
ICAgICAgICAgIEVHTF9XSURUSCwgRUdMaW50KG9iamVjdC5mb3JtYXQucGxhbmVXaWR0aChpLCBv
YmplY3Qud2lkdGgpKSwKKyAgICAgICAgICAgIEVHTF9IRUlHSFQsIEVHTGludChvYmplY3QuZm9y
bWF0LnBsYW5lSGVpZ2h0KGksIG9iamVjdC5oZWlnaHQpKSwKKyAgICAgICAgICAgIEVHTF9MSU5V
WF9EUk1fRk9VUkNDX0VYVCwgRUdMaW50KG9iamVjdC5mb3JtYXQucGxhbmVzW2ldLmZvdXJjYyks
CisgICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfRkRfRVhULCBvYmplY3QuZmRbaV0sCisg
ICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVCwgRUdMaW50KG9iamVjdC5v
ZmZzZXRbaV0pLAorICAgICAgICAgICAgRUdMX0RNQV9CVUZfUExBTkUwX1BJVENIX0VYVCwgRUdM
aW50KG9iamVjdC5zdHJpZGVbaV0pLAorICAgICAgICAgICAgRUdMX05PTkUsCisgICAgICAgIH07
CisgICAgICAgIGltYWdlW2ldID0gY3JlYXRlSW1hZ2VLSFIoKShlZ2xEaXNwbGF5LCBFR0xfTk9f
Q09OVEVYVCwgRUdMX0xJTlVYX0RNQV9CVUZfRVhULCBudWxscHRyLCBzdGQ6OmRhdGEoYXR0cmli
dXRlcykpOworICAgIH0KKworICAgIGF1dG8gaW1hZ2VEYXRhID0gbWFrZVVuaXF1ZTxFR0xJbWFn
ZURhdGE+KCk7CisgICAgYXV0byYgZGF0YSA9ICppbWFnZURhdGE7CisgICAgZGF0YS53aWR0aCA9
IG9iamVjdC53aWR0aDsKKyAgICBkYXRhLmhlaWdodCA9IG9iamVjdC5oZWlnaHQ7CisgICAgZGF0
YS5udW1JbWFnZXMgPSBvYmplY3QuZm9ybWF0Lm51bVBsYW5lczsKKyAgICBnbEdlblRleHR1cmVz
KGRhdGEubnVtSW1hZ2VzLCBkYXRhLnRleHR1cmUuZGF0YSgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5udW1JbWFnZXM7ICsraSkgeworICAgICAgICBkYXRhLmltYWdlW2ld
ID0gaW1hZ2VbaV07CisKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBkYXRh
LnRleHR1cmVbaV0pOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbEVHTEltYWdlVGFy
Z2V0VGV4dHVyZTJET0VTKEdMX1RFWFRVUkVfMkQsIGRhdGEuaW1hZ2VbaV0pOworICAgICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIHJldHVybiBpbWFn
ZURhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzBiZGFjYTZkMmRiZTEwOTUxZWNl
ODNkZTc2NWMwYTczMmE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1
Zi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgor
I2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
I2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgZmluYWwg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1ZigpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlETUFCdWYoKTsKKworICAgIGJvb2wgaXNETUFCdWZCYXNlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWN0aXZhdGVPbkNvbXBv
c2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqLCBUZXh0dXJlTWFwcGVyTGF5ZXIqKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHN3YXBCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIGNsYXNzIERNQUJ1
ZkxheWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERNQUJ1ZkxheWVyPiwgcHVibGlj
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBETUFCdWZMYXllcihETUFCdWZPYmplY3QmJiwg
VGV4dHVyZU1hcHBlckdMOjpGbGFncyA9IDApOworICAgICAgICB2aXJ0dWFsIH5ETUFCdWZMYXll
cigpOworCisgICAgICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXggPSB7IH0sIGZsb2F0IG9wYWNpdHkgPSAxLjApIGZpbmFsOworCisgICAgICAgIHZvaWQg
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LnJlbGVhc2VGbGFnLnJl
bGVhc2UoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY7CisKKyAgICAgICAgc3RydWN0
IEVHTEltYWdlRGF0YTsKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURh
dGE+IGNyZWF0ZUVHTEltYWdlRGF0YShETUFCdWZPYmplY3QmKTsKKworICAgICAgICBETUFCdWZP
YmplY3QgbV9vYmplY3Q7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFR0xJbWFnZURhdGE+IG1f
aW1hZ2VEYXRhOworICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjX21heGltdW1BZ2UgeyAxNiB9OworICAg
ICAgICB1bnNpZ25lZCBtX2FnZSB7IDAgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRj4KKyAgICB2b2lkIHB1c2hETUFCdWYoRE1BQnVmT2JqZWN0JiYgZG1hYnVmT2JqZWN0LCBj
b25zdCBGJiBjb25zdHJ1Y3RvciwgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IDApCisg
ICAgeworICAgICAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fbGF5ZXJzLmVuc3VyZShkbWFidWZPYmplY3QuaGFuZGxlLAorICAgICAgICAgICAg
WyZdIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBETUFCdWZMYXllcihj
b25zdHJ1Y3RvcihXVEZNb3ZlKGRtYWJ1Zk9iamVjdCkpLCBmbGFncykpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIHB1c2hETUFCdWYocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHB1c2hETUFCdWYoUmVmPERNQUJ1ZkxheWVy
PiYmKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2NvbXBvc2l0b3JU
aHJlYWQ7CisjZW5kaWYKKworICAgIHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1aW50cHRyX3Qs
IFJlZjxETUFCdWZMYXllcj4sIFdURjo6RGVmYXVsdEhhc2g8dWludHB0cl90PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50cHRyX3Q+PjsKKyAgICBMYXllck1hcCBtX2xh
eWVyczsKKworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9wZW5kaW5nTGF5ZXI7CisgICAgUmVm
UHRyPERNQUJ1ZkxheWVyPiBtX2NvbW1pdHRlZExheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1RFWFRVUkVNQVBQRVJfUExBVEZPUk1M
QVlFUlBST1hZKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYsIGlzRE1BQnVm
QmFzZWQoKSk7CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454674</attachid>
            <date>2022-03-15 00:33:46 -0700</date>
            <delta_ts>2022-03-16 04:06:43 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-237328-20220315083344.patch</filename>
            <type>text/plain</type>
            <size>80513</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVhMTgyNzRjZDg5MTlk
YmQ1MmE2MWEzNjQ4ZTkxMmM1N2U5YWMxNi4uMTJkZjllNjg3NjdkMmYyZDRhOWE0ZjFhNThmZWQz
N2FiZmJmNWViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMi0wMy0xNSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBQ
cm92aWRlIERNQUJ1Zi1iYXNlZCBjb21wb3NpdGlvbiBsYXllcnMsIERNQUJ1ZlZpZGVvU2luayBp
bnRlZ3JhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxlamFuZHJvIEcuIENhc3Ryby4KKwor
ICAgICAgICBJbnRyb2R1Y2UgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Ziwg
YSBUZXh0dXJlTWFwcGVyIHByb3h5CisgICAgICAgIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxl
cyBwbGF0Zm9ybSBsYXllcnMgYmFja2VkIGJ5IGRtYWJ1ZiBvYmplY3RzLgorICAgICAgICBUaGlz
IHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZGlzcGxheSBvZiBkbWFidWYgcHJvZHVjZXJzIGxpa2Ug
R1N0cmVhbWVyCisgICAgICAgIHBpcGVsaW5lcyBvciBBTkdMRS1iYWNrZWQgV2ViR0wgY29udGV4
dHMuIFRoZSBETUFCdWZMYXllciBjbGFzcyBpcyB0aGUKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIg
b2JqZWN0LCBoYW5kbGluZyBkaXNwbGF5IG9mIHRoZSBhY3R1YWwgZG1hYnVmLiBUaGUgcHJveHkK
KyAgICAgICAgaXRzZWxmIGlzIHRhc2tlZCB3aXRoIGNyZWF0aW5nIGFuZCBjYWNoaW5nIHN1Y2gg
bGF5ZXJzIGZvciBhbnkgZG1hYnVmCisgICAgICAgIG9iamVjdCB0aGF0IG9yaWdpbmF0ZXMgZnJv
bSB0aGUgcHJvZHVjZXIuCisKKyAgICAgICAgRm9yIGVhY2ggZG1hYnVmIG9iamVjdCBwdXNoZWQg
aW50byB0aGUgcHJveHksIHRoZSBhY2NvcmRpbmcgRE1BQnVmTGF5ZXIKKyAgICAgICAgb2JqZWN0
IGlzIHNwYXduZWQgYW5kIGNhY2hlZCBmb3IgZnV0dXJlIHJldXNlLCBleHBlY3RpbmcgdGhlIHBy
b2R1Y2VyCisgICAgICAgIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBkbWFidWZzIGZyb20gYSBwb29s
IG9yIHN3YXBjaGFpbiBvZiB0aGVzZSBvYmplY3RzLgorICAgICAgICBUaGUgY2FjaGUgaXMgZW1w
dGllZCB3aGVuZXZlciBkbWFidWZzIGdvIHVudXNlZCBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZgor
ICAgICAgICBzd2Fwcywgb3IgaWYgdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVkIGRtYWJ1ZnMgY2hh
bmdlcy4KKworICAgICAgICBETUFCdWZGb3JtYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGRp
ZmZlcmVudCBEUk0gZm9ybWF0cywgZm9yCisgICAgICAgIGluc3RhbmNlIGhvdyBkaWZmZXJlbnQg
cGxhbmVzIGZvciBzcGVjaWZpYyBmb3JtYXRzIGFyZSBmb3JtYXR0ZWQgYW5kCisgICAgICAgIHNp
emVkLgorCisgICAgICAgIERNQUJ1Zk9iamVjdCBpcyBhIGNsYXNzIHRoYXQgaGFuZGxlcyBhIGdp
dmVuIGdyb3VwaW5nIG9mIGRtYWJ1ZnMKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZp
ZWQgZm9ybWF0LiBJdCBoYXMgYW4gYXNzb2NpYXRlZCBoYW5kbGUgdmFsdWUsCisgICAgICAgIHNp
emUsIGFuZCBwZXItcGxhbmUgZG1hYnVmIGZpbGUgZGVzY3JpcHRvcnMsIG9mZnNldHMsIHN0cmlk
ZXMgYW5kCisgICAgICAgIG1vZGlmaWVycywgYWxvbmcgd2l0aCBhIERNQUJ1ZlJlbGVhc2VGbGFn
IGluc3RhbmNlLgorCisgICAgICAgIERNQUJ1ZlJlbGVhc2VGbGFnIG9iamVjdHMgYXJlIHVzZWQg
YXMgYW4gZXZlbnRmZC1iYXNlZCByZWxlYXNlIG1lY2hhbmlzbQorICAgICAgICB0aGF0IGluZGlj
YXRlcyB0byB0aGUgcHJvZHVjZXIgdGhhdCB0aGUgZ2l2ZW4gRE1BQnVmT2JqZWN0IGhhcyBiZWVu
CisgICAgICAgIHByZXNlbnRlZCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2VkIGFuZCBpcyB0aHVz
IGF2YWlsYWJsZSBmb3IgcmV1c2UuCisKKyAgICAgICAgR0JNQnVmZmVyU3dhcGNoYWluIHByb3Zp
ZGVzIGEgY3VzdG9tIHN3YXBjaGFpbiBpbXBsZW1lbnRhdGlvbiB0aGF0J3MKKyAgICAgICAgYmFz
ZWQgb24gbGliZ2JtIGZ1bmN0aW9uYWxpdHkuIEVhY2ggc3VjaCBzd2FwY2hhaW4gaGFzIGEgY2Fw
YWNpdHkKKyAgICAgICAgc3BlY2lmaWVkIGR1cmluZyBjb25zdHJ1Y3Rpb24sIHdpdGggdGhlIGNh
cGFjaXRpZXMgb2YgZm91ciBvciBlaWdodAorICAgICAgICBjdXJyZW50bHkgc3VwcG9ydGVkLiBn
ZXRCdWZmZXIoKSBpcyBjYWxsZWQgYnkgdGhlIHByb2R1Y2VyIHRvIG9idGFpbiBhCisgICAgICAg
IGJ1ZmZlciBvYmplY3QgdGhhdCdzIHRoZW4gdXNlZCBmb3IgYmFja2luZyBvZiBzcGVjaWZpYyBj
b250ZW50IGxpa2UKKyAgICAgICAgQU5HTEUgZXhlY3V0aW9uIG9yIG1lZGlhJ3Mgc29mdHdhcmUt
ZGVjb2RlZCB2aWRlbyBmcmFtZXMuIEJ1ZmZlcnMKKyAgICAgICAgb2J0YWluZWQgdGhpcyB3YXkg
YXJlIG1vdmVkIG92ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFycmF5LCB3aXRoCisgICAg
ICAgIHRoZSBleHBlY3RhdGlvbiBvZiByZXVzaW5nIHRoZW0gb25jZSB0aGV5IGFyZSByZWxlYXNl
ZCBieSB0aGUKKyAgICAgICAgY29tcG9zaXRpb24gZW5naW5lLgorCisgICAgICAgIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciBpbXBsZW1lbnRhdGlvbiBpcyBlbmhhbmNlZCB0byB1c2UgdGhl
CisgICAgICAgIHJlY2VudGx5LWFkZGVkIFdlYktpdERNQUJ1ZlZpZGVvU2luayBlbGVtZW50IGlm
IGl0cyB1c2UgaXMgZW5hYmxlZAorICAgICAgICB0aHJvdWdoIHRoZSBkZXZlbG9wbWVudC1wdXJw
b3NlIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBpZiB0aGUKKyAgICAgICAgbmVjZXNzYXJ5IEdT
dHJlYW1lciBmYWNpbGl0aWVzIGFyZSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uIFdoZW4gdGhlc2UK
KyAgICAgICAgY29uZGl0aW9ucyBhcmUgbWV0LCB0aGUgTmljb3NpYTo6Q29udGVudExheWVyIGlu
c3RhbmNlIGlzIGFsc28KKyAgICAgICAgY29uc3RydWN0ZWQgd2l0aCBhIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlETUFCdWYgaW5zdGFuY2UsIHNpbmNlCisgICAgICAgIHdlIGV4cGVj
dCB0byBwcmVzZW50IHRoZSBkbWFidWZzIHRocm91Z2ggdGhhdCBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgIFdpdGggdGhlIFdlYktpdERNQUJ1ZlZpZGVvU2luaywgdGhlIGluY29taW5nIHNhbXBs
ZXMgYXJlIGVpdGhlciBiYXNlZAorICAgICAgICBvbiBkbWFidWZzIChpbiBjYXNlIG9mIGRtYWJ1
Zi1jYXBhYmxlIGhhcmR3YXJlIGRlY29kZXIpIG9yIGFyZSBqdXN0IHJhdworICAgICAgICBkYXRh
IChtb3N0IGxpa2VseSBjb21pbmcgZnJvbSBhIHNvZnR3YXJlLWJhc2VkIGRlY29kZXIpLiBJbiBj
YXNlIG9mCisgICAgICAgIGRtYWJ1ZnMgd2UgY2FuIHVzZSB0aGUgR3N0TWVtb3J5IHBvaW50ZXIg
YXMgdGhlIGhhbmRsZSB0aHJvdWdoIHdoaWNoCisgICAgICAgIHRoZSByZWxldmFudCBkYXRhIGlz
IGNhY2hlZCBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLAorICAgICAg
ICBhbmQgdXBvbiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSB3ZSByZXRyaWV2ZSBhbGwgdGhlIHJlbGV2
YW50IGRtYWJ1ZiBkYXRhCisgICAgICAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgdGhhdCBw
cm94eSBpbXBsZW1lbnRhdGlvbiB0byBjb25zdHJ1Y3QgYQorICAgICAgICByZW5kZXJhYmxlIEVH
TEltYWdlLgorCisgICAgICAgIEluIGNhc2Ugb2Ygc29mdHdhcmUtZGVjb2RlZCByYXcgZGF0YSwg
d2UgaGF2ZSB0byB1c2UgdGhlIHN3YXBjaGFpbgorICAgICAgICBvYmplY3QgYW5kIGNvcHkgdGhl
IGRhdGEgb24gYSBwZXItcGxhbmUgYmFzaXMgZm9yIGVhY2ggc3VjaCBzYW1wbGUsCisgICAgICAg
IGZpbmFsbHkgcHVzaGluZyB0aGUgZG1hYnVmIGRhdGEgb2YgdGhhdCBzd2FwY2hhaW4gYnVmZmVy
IGludG8gdGhlCisgICAgICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYg
aW5zdGFuY2UuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
V1BFLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZGb3JtYXQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MpOgorICAgICAgICAoV2Vi
Q29yZTo6RE1BQnVmRm9ybWF0OjpwbGFuZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRNQUJ1ZkZvcm1hdDo6cGxhbmVIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE1B
QnVmRm9ybWF0OjpQbGFuZTo6UGxhbmUpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0
SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZv
cm1hdEltcGw6OmRlZmluZVBsYW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdDo6
aW5zdGFudGlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0OjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpETUFCdWZPYmplY3Q6OkRNQUJ1Zk9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpETUFCdWZPYmplY3Q6On5ETUFCdWZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RE1BQnVmT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2di
bS9ETUFCdWZSZWxlYXNlRmxhZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZlJl
bGVhc2VGbGFnOjpETUFCdWZSZWxlYXNlRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZS
ZWxlYXNlRmxhZzo6fkRNQUJ1ZlJlbGVhc2VGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1
ZlJlbGVhc2VGbGFnOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFz
ZUZsYWc6OmR1cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZSZWxlYXNlRmxhZzo6
cmVsZWFzZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6OnJl
bGVhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hh
aW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6R0JN
QnVmZmVyU3dhcGNoYWluKToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6
Z2V0QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVy
OjpCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6
OmNyZWF0ZURNQUJ1Zk9iamVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJT
d2FwY2hhaW46OkJ1ZmZlcjo6UGxhbmVEYXRhOjp+UGxhbmVEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OmhhbmRsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6bnVtUGxhbmVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpwbGFuZURh
dGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZW
aWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0RE1BQnVmVmlkZW9TaW5rSXNF
bmFibGVkKToKKyAgICAgICAgKHdlYktpdERNQUJ1ZlZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJp
dmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVv
U2lua0dTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUxheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZvdXJjY1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVzaERNQUJ1ZlRvQ29tcG9zaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJS
ZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlVmlkZW9TaW5rRE1BQnVmKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eURNQUJ1Zi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VL
SFIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUltYWdlS0hSKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpF
R0xJbWFnZURhdGE6On5FR0xJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWY6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eURNQUJ1Zjo6c3dhcEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpwdXNoRE1BQnVmKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVy
OjpETUFCdWZMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1B
QnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaDogQWRkZWQu
CisKIDIwMjItMDMtMTQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW01haWwgY29tcG9zZV0gQWxsb3cgY29waWVkIHJlc291cmNlcyB3aXRoIHJlbW90
ZSAoSFRUUC9IVFRQUykgVVJMcyB0byBiZSBwYXN0ZWQgYXMgYXR0YWNobWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKaW5kZXggNGUzMDMzNWNmYWQ5ZWQ3OWIwNTczNzMxZjUyNDEyY2JiOWQyNmIzNi4u
YjVlNThjY2Q3NjE5ZTQ3Yzc3Y2I3YjJjNmQ3YmE1ODFjYWIwMjU2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dU
Sy50eHQKQEAgLTEwMSw2ICsxMDEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0
RUdMTGliV1BFLmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRF
R0xXYXlsYW5kLmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRF
R0xYMTEuY3BwIEBuby11bmlmeQogCitwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dh
cGNoYWluLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTURldmljZS5jcHAKIAogcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUu
dHh0CmluZGV4IDU3ZmE3Y2E2N2M0ZGVhNGE5ZTViOTg0NWU3MmFlMjU4NzNkOGNmNTUuLmY4Yzhj
NzA0OTJmYjA5ZDEwOWFlZDExODRiN2M2OWNhMjVlYjJmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0
CkBAIC04OSw2ICs4OSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZ2wvR0xDb250ZXh0RUdMTGliV1BFLmNwcAogCitwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JN
QnVmZmVyU3dhcGNoYWluLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTURldmljZS5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvbGlid3BlL1BsYXRmb3JtRGlzcGxheUxpYldQRS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDRlMGFlYmUx
OTc0Nzc4OGQ2NDBkYzk5NWE2NmM0M2JiYTJjOTE4MTYuLjczZjY5YzUwOTQ3MGVmOGFlOTc5Y2Nk
OTdkNjFhMGY3ODhhNTQ3ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZQpAQCAtMzQsNiArMzQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTb2xpZENvbG9yTGF5
ZXIuaApAQCAtNjAsNiArNjEsNyBAQCBpZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTKQogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJC
dWZmZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckRtYWJ1Zi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eUdMLmNwcAogCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZGb3JtYXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZGb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2Q3MjVh
OTcwMTUzYzRmZjc4YTdiYjQ4ZTA3YjhjMGU3ZjdjNDMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oCkBAIC0wLDAg
KzEsMzcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIERNQUJ1ZkZvcm1hdEltcGwgeworCitzdGF0aWMg
Y29uc3RleHByIHVpbnQzMl90IGNyZWF0ZUZvdXJDQyhjaGFyIGEsIGNoYXIgYiwgY2hhciBjLCBj
aGFyIGQpCit7CisgICAgcmV0dXJuIHVpbnQzMl90KGEpIHwgKHVpbnQzMl90KGIpIDw8IDgpIHwg
KHVpbnQzMl90KGMpIDw8IDE2KSB8ICh1aW50MzJfdChkKSA8PCAyNCk7Cit9CisKK30KKworc3Ry
dWN0IERNQUJ1ZkZvcm1hdCB7CisgICAgZW51bSBjbGFzcyBGb3VyQ0MgOiB1aW50MzJfdCB7Cisg
ICAgICAgIEludmFsaWQgPSAwLAorCisgICAgICAgIFI4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3Jl
YXRlRm91ckNDKCdSJywgJzgnLCAnICcsICcgJyksCisgICAgICAgIEdSODggPSBETUFCdWZGb3Jt
YXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0cnLCAnUicsICc4JywgJzgnKSwKKworICAgICAgICBYUkdC
ODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWCcsICdSJywgJzInLCAnNCcp
LAorICAgICAgICBYQkdSODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWCcs
ICdCJywgJzInLCAnNCcpLAorICAgICAgICBSR0JYODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNy
ZWF0ZUZvdXJDQygnUicsICdYJywgJzInLCAnNCcpLAorICAgICAgICBCR1JYODg4OCA9IERNQUJ1
ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdYJywgJzInLCAnNCcpLAorICAgICAgICBB
UkdCODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQScsICdSJywgJzInLCAn
NCcpLAorICAgICAgICBBQkdSODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygn
QScsICdCJywgJzInLCAnNCcpLAorICAgICAgICBSR0JBODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6
OmNyZWF0ZUZvdXJDQygnUicsICdBJywgJzInLCAnNCcpLAorICAgICAgICBCR1JBODg4OCA9IERN
QUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQicsICdBJywgJzInLCAnNCcpLAorICAgICAg
ICBSR0I4ODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnRycsICcyJywg
JzQnKSwKKyAgICAgICAgQkdSODg4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdC
JywgJ0cnLCAnMicsICc0JyksCisKKyAgICAgICAgSTQyMCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNy
ZWF0ZUZvdXJDQygnSScsICc0JywgJzInLCAnMCcpLAorICAgICAgICBZVjEyID0gRE1BQnVmRm9y
bWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZJywgJ1YnLCAnMScsICcyJyksCisgICAgICAgIEE0MjAg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnNCcsICcyJywgJzAnKSwKKyAg
ICAgICAgTlYxMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzEn
LCAnMicpLAorICAgICAgICBOVjIxID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdO
JywgJ1YnLCAnMicsICcxJyksCisKKyAgICAgICAgWVVZMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNy
ZWF0ZUZvdXJDQygnWScsICdVJywgJ1knLCAnMicpLAorICAgICAgICBZVllVID0gRE1BQnVmRm9y
bWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZJywgJ1YnLCAnWScsICdVJyksCisgICAgICAgIFVZVlkg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1UnLCAnWScsICdWJywgJ1knKSwKKyAg
ICAgICAgVllVWSA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdZJywgJ1Un
LCAnWScpLAorICAgICAgICBWVVlBID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdW
JywgJ1UnLCAnWScsICdBJyksCisgICAgICAgIEFZVVYgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ0EnLCAnWScsICdVJywgJ1YnKSwKKworICAgICAgICBZNDQ0ID0gRE1BQnVmRm9y
bWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZJywgJzQnLCAnNCcsICc0JyksCisgICAgICAgIFk0MUIg
PSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ1knLCAnNCcsICcxJywgJ0InKSwKKyAg
ICAgICAgWTQyQiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzIn
LCAnQicpLAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNfbWF4UGxh
bmVzID0gNDsKKworICAgIHRlbXBsYXRlPEZvdXJDQz4gc3RhdGljIERNQUJ1ZkZvcm1hdCBjcmVh
dGUoKSA9IGRlbGV0ZTsKKyAgICBzdGF0aWMgRE1BQnVmRm9ybWF0IGNyZWF0ZSh1aW50MzJfdCk7
CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0MgZm91cmNjVmFsdWUsIHR5cGVuYW1lLi4uIFBsYW5lRGVm
aW5pdGlvblR5cGVzPgorICAgIHN0YXRpYyBETUFCdWZGb3JtYXQgaW5zdGFudGlhdGUoKTsKKwor
ICAgIEZvdXJDQyBmb3VyY2MgeyBGb3VyQ0M6OkludmFsaWQgfTsKKyAgICB1bnNpZ25lZCBudW1Q
bGFuZXMgeyAwIH07CisKKyAgICB1aW50MzJfdCBwbGFuZVdpZHRoKHVuc2lnbmVkIHBsYW5lSW5k
ZXgsIHVpbnQzMl90IHdpZHRoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHBsYW5lSW5k
ZXggPCBjX21heFBsYW5lcyk7CisgICAgICAgIHJldHVybiAod2lkdGggPj4gcGxhbmVzW3BsYW5l
SW5kZXhdLmhvcml6b250YWxTdWJzYW1wbGluZyk7CisgICAgfQorCisgICAgdWludDMyX3QgcGxh
bmVIZWlnaHQodW5zaWduZWQgcGxhbmVJbmRleCwgdWludDMyX3QgaGVpZ2h0KSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKHBsYW5lSW5kZXggPCBjX21heFBsYW5lcyk7CisgICAgICAgIHJl
dHVybiAoaGVpZ2h0ID4+IHBsYW5lc1twbGFuZUluZGV4XS52ZXJ0aWNhbFN1YnNhbXBsaW5nKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0MgZm91cmNjVmFsdWUsIHVuc2lnbmVkIGhzVmFs
dWUsIHVuc2lnbmVkIHZzVmFsdWU+CisgICAgc3RydWN0IFBsYW5lRGVmaW5pdGlvbiB7CisgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgRm91ckNDIGZvdXJjYyA9IGZvdXJjY1ZhbHVlOworICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGhvcml6b250YWxTdWJzYW1wbGluZyA9IGhzVmFs
dWU7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdmVydGljYWxTdWJzYW1wbGlu
ZyA9IHZzVmFsdWU7CisgICAgfTsKKworICAgIHN0cnVjdCBQbGFuZSB7CisgICAgICAgIFBsYW5l
KCkgPSBkZWZhdWx0OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYW5lRGVmaXRpb25U
eXBlPgorICAgICAgICBQbGFuZShjb25zdCBQbGFuZURlZml0aW9uVHlwZSYpCisgICAgICAgICAg
ICA6IGZvdXJjYyhQbGFuZURlZml0aW9uVHlwZTo6Zm91cmNjKQorICAgICAgICAgICAgLCBob3Jp
em9udGFsU3Vic2FtcGxpbmcoUGxhbmVEZWZpdGlvblR5cGU6Omhvcml6b250YWxTdWJzYW1wbGlu
ZykKKyAgICAgICAgICAgICwgdmVydGljYWxTdWJzYW1wbGluZyhQbGFuZURlZml0aW9uVHlwZTo6
dmVydGljYWxTdWJzYW1wbGluZykKKyAgICAgICAgeyB9CisKKyAgICAgICAgRm91ckNDIGZvdXJj
YyB7IEZvdXJDQzo6SW52YWxpZCB9OworICAgICAgICB1bnNpZ25lZCBob3Jpem9udGFsU3Vic2Ft
cGxpbmcgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHZlcnRpY2FsU3Vic2FtcGxpbmcgeyAwIH07
CisgICAgfTsKKyAgICBzdGQ6OmFycmF5PFBsYW5lLCBjX21heFBsYW5lcz4gcGxhbmVzOworfTsK
KworbmFtZXNwYWNlIERNQUJ1ZkZvcm1hdEltcGwgeworCit0ZW1wbGF0ZTxETUFCdWZGb3JtYXQ6
OkZvdXJDQyBmb3VyY2NWYWx1ZT4KK2lubGluZSBETUFCdWZGb3JtYXQgY3JlYXRlU2luZ2xlUGxh
bmVSR0JBKCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxmb3VyY2NW
YWx1ZSwKKyAgICAgICAgRE1BQnVmRm9ybWF0OjpQbGFuZURlZmluaXRpb248Zm91cmNjVmFsdWUs
IDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgSW5kZXgsIHNpemVfdCBTaXplLCB0eXBl
bmFtZSBQbGFuZURlZmluaXRpb25UeXBlLCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBl
cz4KK3ZvaWQgZGVmaW5lUGxhbmUoc3RkOjphcnJheTxETUFCdWZGb3JtYXQ6OlBsYW5lLCBETUFC
dWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiYgcGxhbmVzKQoreworICAgIG5ldyAoJnBsYW5lc1tJbmRl
eF0pIERNQUJ1ZkZvcm1hdDo6UGxhbmUoUGxhbmVEZWZpbml0aW9uVHlwZSB7IH0pOworICAgIGlm
IGNvbnN0ZXhwciAoKEluZGV4ICsgMSkgPCBTaXplKQorICAgICAgICBkZWZpbmVQbGFuZTxJbmRl
eCArIDEsIFNpemUsIFBsYW5lRGVmaW5pdGlvblR5cGVzLi4uPihwbGFuZXMpOworfQorCit9CisK
K3RlbXBsYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDIGZvdXJjY1ZhbHVlLCB0eXBlbmFtZS4uLiBQ
bGFuZURlZmluaXRpb25UeXBlcz4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0Ojpp
bnN0YW50aWF0ZSgpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YuLi4oUGxhbmVEZWZpbml0
aW9uVHlwZXMpIDw9IDQpOworCisgICAgRE1BQnVmRm9ybWF0IGZvcm1hdDsKKyAgICBmb3JtYXQu
Zm91cmNjID0gZm91cmNjVmFsdWU7CisgICAgZm9ybWF0Lm51bVBsYW5lcyA9IHNpemVvZi4uLihQ
bGFuZURlZmluaXRpb25UeXBlcyk7CisgICAgRE1BQnVmRm9ybWF0SW1wbDo6ZGVmaW5lUGxhbmU8
MCwgc2l6ZW9mLi4uKFBsYW5lRGVmaW5pdGlvblR5cGVzKSwgUGxhbmVEZWZpbml0aW9uVHlwZXMu
Li4+KGZvcm1hdC5wbGFuZXMpOworICAgIHJldHVybiBmb3JtYXQ7Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpG
b3VyQ0M6OlhSR0I4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0
ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlhSR0I4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91
ckNDOjpYQkdSODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVT
aW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpYQkdSODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJD
Qzo6UkdCWDg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2lu
Z2xlUGxhbmVSR0JBPEZvdXJDQzo6UkdCWDg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OkJHUlg4ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmds
ZVBsYW5lUkdCQTxGb3VyQ0M6OkJHUlg4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
RE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpB
UkdCODg4OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQ
bGFuZVJHQkE8Rm91ckNDOjpBUkdCODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERN
QUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QUJH
Ujg4ODg+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxh
bmVSR0JBPEZvdXJDQzo6QUJHUjg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFC
dWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQkE4
ODg4PigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5l
UkdCQTxGb3VyQ0M6OlJHQkE4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JBODg4
OD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJH
QkE8Rm91ckNDOjpCR1JBODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZv
cm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6STQyMD4oKQor
eworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6STQyMCwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OlI4LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBE
TUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVYxMj4oKQoreworICAg
IHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6WVYxMiwKKyAgICAgICAg
UGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4
LCAxLCAxPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZG
b3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QTQyMD4oKQoreworICAgIHJldHVy
biBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6QTQyMCwKKyAgICAgICAgUGxhbmVE
ZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91
ckNDOjpSOCwgMSwgMT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAx
PiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+PigpOworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpOVjEyPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5z
dGFudGlhdGU8Rm91ckNDOjpOVjEyLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpS
OCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDEsIDE+Pigp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZv
cm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpOVjIxLAorICAgICAgICBQbGFuZURlZmluaXRpb248
Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgs
IDEsIDE+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZv
cm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVVkyPigpCit7CisgICAgcmV0dXJu
IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZVVkyLAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVZZVT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6
WVZZVSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6R1I4OCwgMCwgMD4+KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlVZVlk+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0
OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlVZVlksCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3Vy
Q0M6OkdSODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0
IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpWWVVZPigpCit7Cisg
ICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpZVllVLAorICAgICAg
ICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8
PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6VlVZQT4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRl
PEZvdXJDQzo6VlVZQSwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6QUJHUjg4ODgs
IDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZv
cm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBWVVWPigpCit7CisgICAgcmV0dXJu
IERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpWVVlBLAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpBQkdSODg4OCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6Olk0NDQ+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3Vy
Q0M6Olk0NDQsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAg
ICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURl
ZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBE
TUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0
MUI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6Olk0
MUIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAgICAg
UGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDIsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRp
b248Rm91ckNDOjpSOCwgMiwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZG
b3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MkI+KCkK
K3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6Olk0MkIsCisg
ICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVE
ZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91
ckNDOjpSOCwgMSwgMD4+KCk7Cit9CisKK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0
OjpjcmVhdGUodWludDMyX3QgZm91cmNjVmFsdWUpCit7CisgICAgc3dpdGNoIChmb3VyY2NWYWx1
ZSkgeworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpYUkdCODg4OCk6CisgICAgICAgIHJldHVy
biBjcmVhdGU8Rm91ckNDOjpYUkdCODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6
WEJHUjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WEJHUjg4ODg+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlJHQlg4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZTxGb3VyQ0M6OlJHQlg4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpCR1JYODg4
OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpCR1JYODg4OD4oKTsKKyAgICBjYXNl
IHVpbnQzMl90KEZvdXJDQzo6QVJHQjg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJD
Qzo6QVJHQjg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OkFCR1I4ODg4KToKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkFCR1I4ODg4PigpOworICAgIGNhc2UgdWludDMy
X3QoRm91ckNDOjpSR0JBODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpSR0JB
ODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QkdSQTg4ODgpOgorICAgICAgICBy
ZXR1cm4gY3JlYXRlPEZvdXJDQzo6QkdSQTg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3Vy
Q0M6Okk0MjApOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6STQyMD4oKTsKKyAgICBj
YXNlIHVpbnQzMl90KEZvdXJDQzo6WVYxMik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckND
OjpZVjEyPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpBNDIwKToKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZTxGb3VyQ0M6OkE0MjA+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Ok5W
MTIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6TlYxMj4oKTsKKyAgICBjYXNlIHVp
bnQzMl90KEZvdXJDQzo6TlYyMSk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpOVjIx
PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpZVVkyKToKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZTxGb3VyQ0M6OllVWTI+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllWWVUpOgor
ICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WVZZVT4oKTsKKyAgICBjYXNlIHVpbnQzMl90
KEZvdXJDQzo6VVlWWSk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpVWVZZPigpOwor
ICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpWWVVZKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxG
b3VyQ0M6OlVZVlk+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OlZVWUEpOgorICAgICAg
ICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6VlVZQT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJD
Qzo6QVlVVik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpBWVVWPigpOworICAgIGNh
c2UgdWludDMyX3QoRm91ckNDOjpZNDQ0KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6
Olk0NDQ+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Olk0MUIpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6WTQxQj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQy
Qik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZNDJCPigpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dibS9ETUFCdWZPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dibS9ETUFCdWZPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODY0NDQ0NDM5NGY3YjlkOWZmNDNkY2Jk
YzM5MmFiYWE3N2NjNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9iamVjdC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAo
QykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1ZlJlbGVhc2VGbGFnLmgiCisjaW5jbHVk
ZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBETUFCdWZPYmpl
Y3QgeworICAgIERNQUJ1Zk9iamVjdCh1aW50cHRyX3QgaGFuZGxlKQorICAgICAgICA6IGhhbmRs
ZShoYW5kbGUpCisgICAgeyB9CisKKyAgICB+RE1BQnVmT2JqZWN0KCkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChmZFtpXSAhPSAtMSkKKyAgICAgICAgICAgICAgICBjbG9zZShmZFtpXSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBETUFCdWZPYmplY3QoY29uc3QgRE1BQnVmT2JqZWN0Jikg
PSBkZWxldGU7CisgICAgRE1BQnVmT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgRE1BQnVmT2JqZWN0
JikgPSBkZWxldGU7CisKKyAgICBETUFCdWZPYmplY3QoRE1BQnVmT2JqZWN0JiYgbykKKyAgICAg
ICAgOiBoYW5kbGUoby5oYW5kbGUpCisgICAgICAgICwgZm9ybWF0KG8uZm9ybWF0KQorICAgICAg
ICAsIHdpZHRoKG8ud2lkdGgpCisgICAgICAgICwgaGVpZ2h0KG8uaGVpZ2h0KQorICAgICAgICAs
IHJlbGVhc2VGbGFnKFdURk1vdmUoby5yZWxlYXNlRmxhZykpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAg
ICBmZFtpXSA9IG8uZmRbaV07CisgICAgICAgICAgICBvLmZkW2ldID0gLTE7CisKKyAgICAgICAg
ICAgIG9mZnNldFtpXSA9IG8ub2Zmc2V0W2ldOworICAgICAgICAgICAgc3RyaWRlW2ldID0gby5z
dHJpZGVbaV07CisgICAgICAgICAgICBtb2RpZmllcltpXSA9IG8ubW9kaWZpZXJbaV07CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBETUFCdWZPYmplY3QmIG9wZXJhdG9yPShETUFCdWZPYmplY3Qm
JiBvKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm8pCisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisKKyAgICAgICAgdGhpcy0+fkRNQUJ1Zk9iamVjdCgpOworICAgICAgICBuZXcgKHRo
aXMpIERNQUJ1Zk9iamVjdChXVEZNb3ZlKG8pKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIHVpbnRwdHJfdCBoYW5kbGUgeyAwIH07CisgICAgRE1BQnVmRm9ybWF0IGZvcm1h
dCB7IH07CisgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgaGVpZ2h0IHsg
MCB9OworICAgIERNQUJ1ZlJlbGVhc2VGbGFnIHJlbGVhc2VGbGFnIHsgfTsKKyAgICBzdGQ6OmFy
cmF5PGludCwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gZmQgeyAtMSwgLTEsIC0xLCAtMSB9
OworICAgIHN0ZDo6YXJyYXk8c2l6ZV90LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBvZmZz
ZXQgeyAwLCAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTx1aW50MzJfdCwgRE1BQnVmRm9ybWF0
OjpjX21heFBsYW5lcz4gc3RyaWRlIHsgMCwgMCwgMCwgMCB9OworICAgIHN0ZDo6YXJyYXk8dWlu
dDY0X3QsIERNQUJ1ZkZvcm1hdDo6Y19tYXhQbGFuZXM+IG1vZGlmaWVyIHsgMCwgMCwgMCwgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFnLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmUmVsZWFzZUZsYWcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZjRkNzc2MDA1M2Y5OWM1NTg3NjUwYTA4NmFhYjk3MTA0ODc1ZjdlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VG
bGFnLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjaW5jbHVk
ZSA8d3RmL1VuaVN0ZEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBE
TUFCdWZSZWxlYXNlRmxhZyB7CisgICAgRE1BQnVmUmVsZWFzZUZsYWcoKSA9IGRlZmF1bHQ7CisK
KyAgICBlbnVtIEluaXRpYWxpemVUYWcgeyBJbml0aWFsaXplIH07CisgICAgRE1BQnVmUmVsZWFz
ZUZsYWcoSW5pdGlhbGl6ZVRhZykKKyAgICB7CisgICAgICAgIGZkID0gZXZlbnRmZCgwLCBFRkRf
Q0xPRVhFQyB8IEVGRF9OT05CTE9DSyk7CisgICAgfQorCisgICAgfkRNQUJ1ZlJlbGVhc2VGbGFn
KCkKKyAgICB7CisgICAgICAgIGlmIChmZCAhPSAtMSkKKyAgICAgICAgICAgIGNsb3NlKGZkKTsK
KyAgICAgICAgZmQgPSAtMTsKKyAgICB9CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhjb25zdCBE
TUFCdWZSZWxlYXNlRmxhZyYpID0gZGVsZXRlOworICAgIERNQUJ1ZlJlbGVhc2VGbGFnJiBvcGVy
YXRvcj0oY29uc3QgRE1BQnVmUmVsZWFzZUZsYWcmKSA9IGRlbGV0ZTsKKworICAgIERNQUJ1ZlJl
bGVhc2VGbGFnKERNQUJ1ZlJlbGVhc2VGbGFnJiYgbykKKyAgICB7CisgICAgICAgIGZkID0gby5m
ZDsKKyAgICAgICAgby5mZCA9IC0xOworICAgIH0KKworICAgIERNQUJ1ZlJlbGVhc2VGbGFnJiBv
cGVyYXRvcj0oRE1BQnVmUmVsZWFzZUZsYWcmJiBvKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMg
PT0gJm8pCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgdGhpcy0+fkRNQUJ1
ZlJlbGVhc2VGbGFnKCk7CisgICAgICAgIG5ldyAodGhpcykgRE1BQnVmUmVsZWFzZUZsYWcoV1RG
TW92ZShvKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBETUFCdWZSZWxl
YXNlRmxhZyBkdXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBETUFCdWZSZWxlYXNlRmxhZyBmbGFnOworICAg
ICAgICBmbGFnLmZkID0gZHVwQ2xvc2VPbkV4ZWMoZmQpOworICAgICAgICByZXR1cm4gZmxhZzsK
KyAgICB9CisKKyAgICBib29sIHJlbGVhc2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChm
ZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHVpbnQ2NF90IHZh
bHVlIHsgMCB9OworICAgICAgICBpZiAocmVhZChmZCwgJnZhbHVlLCBzaXplb2YodWludDY0X3Qp
KSA9PSBzaXplb2YodWludDY0X3QpKQorICAgICAgICAgICAgcmV0dXJuICEhdmFsdWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVhc2UoKQorICAgIHsKKyAg
ICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVpbnQ2
NF90IHZhbHVlIHsgMSB9OworICAgICAgICB3cml0ZShmZCwgJnZhbHVlLCBzaXplb2YodWludDY0
X3QpKTsKKyAgICB9CisKKyAgICBpbnQgZmQgeyAtMSB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2E3MDYwODRlOTg0YzIy
MDljZWNhYmQwOWFhNzZhNTVjODUzZmUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0JNQnVmZmVyU3dhcGNoYWluLmgiCisKKyNpbmNsdWRl
ICJHQk1EZXZpY2UuaCIKKyNpbmNsdWRlIDxnYm0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitHQk1CdWZmZXJTd2FwY2hhaW46OkdCTUJ1ZmZlclN3YXBjaGFpbihCdWZmZXJTd2FwY2hhaW5T
aXplIHNpemUpCit7CisgICAgQVNTRVJUKHVuc2lnbmVkKHNpemUpIDwgY19tYXhCdWZmZXJzKTsK
KyAgICBtX2FycmF5LnNpemUgPSB1bnNpZ25lZChzaXplKTsKK30KKworR0JNQnVmZmVyU3dhcGNo
YWluOjp+R0JNQnVmZmVyU3dhcGNoYWluKCkgPSBkZWZhdWx0OworCitSZWZQdHI8R0JNQnVmZmVy
U3dhcGNoYWluOjpCdWZmZXI+IEdCTUJ1ZmZlclN3YXBjaGFpbjo6Z2V0QnVmZmVyKGNvbnN0IEJ1
ZmZlckRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvJiBkZXZpY2UgPSBHQk1E
ZXZpY2U6OmdldCgpOworCisgICAgLy8gSWYgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZXF1ZXN0
ZWQgYnVmZmVycyBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBkZXNjcmlwdGlvbiB0byB0aGUgbmV3
IG9uZSBhbmQgd3JlY2sgdGhlIGV4aXN0aW5nIGJ1ZmZlcnMuCisgICAgLy8gVGhpcyBzaG91bGQg
aGFuZGxlIGNoYW5nZXMgaW4gZm9ybWF0IG9yIGRpbWVuc2lvbiBvZiB0aGUgYnVmZmVycy4KKyAg
ICBpZiAoZGVzY3JpcHRpb24uZm9ybWF0LmZvdXJjYyAhPSBtX2FycmF5LmRlc2NyaXB0aW9uLmZv
cm1hdC5mb3VyY2MgfHwgZGVzY3JpcHRpb24ud2lkdGggIT0gbV9hcnJheS5kZXNjcmlwdGlvbi53
aWR0aCB8fCBkZXNjcmlwdGlvbi5oZWlnaHQgIT0gbV9hcnJheS5kZXNjcmlwdGlvbi5oZWlnaHQp
IHsKKyAgICAgICAgbV9hcnJheS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICBt
X2FycmF5Lm9iamVjdCA9IHsgfTsKKyAgICB9CisKKyAgICAvLyBTd2FwY2hhaW4gd2FzIGFza2Vk
IHRvIHByb3ZpZGUgYSBidWZmZXIuIFRoZSBidWZmZXIgYXJyYXkgaXMgdHJhdmVyc2VkIHRvIGZp
bmQgb25lLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5LnNpemU7ICsraSkg
eworICAgICAgICBpZiAoIW1fYXJyYXkub2JqZWN0W2ldKSB7CisgICAgICAgICAgICAvLyBJZiBu
byBidWZmZXIgd2FzIHNwYXduZWQgeWV0IGF0IHRoaXMgbG9jYXRpb24sIHdlIGRvIHRoYXQsIGFu
ZCByZXR1cm4gaXQuCisgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0UmVmKCpuZXcgQnVm
ZmVyKG1faGFuZGxlR2VuZXJhdG9yKyssIGRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBtX2Fy
cmF5Lm9iamVjdFtpXSA9IGJ1ZmZlci5jb3B5UmVmKCk7CisKKyAgICAgICAgICAgIC8vIEZpbGwg
b3V0IHRoZSBidWZmZXIncyBkZXNjcmlwdGlvbiBhbmQgcGxhbmUgaW5mb3JtYXRpb24gZm9yIGtu
b3duIGFuZCBzdXBwb3J0ZWQgZm9ybWF0cy4KKyAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRp
b24uZm9ybWF0LmZvdXJjYykgeworICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJD
Qzo6WFJHQjg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdS
ODg4ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQlg4ODg4Ogor
ICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSWDg4ODg6CisgICAgICAg
ICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4ODoKKyAgICAgICAgICAgIGNh
c2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFCR1I4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6UkdCQTg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1h
dDo6Rm91ckNDOjpCR1JBODg4ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6Okk0MjA6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVjEyOgor
ICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QTQyMDoKKyAgICAgICAgICAg
IGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMTI6CisgICAgICAgICAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpOVjIxOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6WVVZMjoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU6
CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpVWVZZOgorICAgICAgICAg
ICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6VllVWToKKyAgICAgICAgICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpBWVVWOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQ0
NDoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MUI6CisgICAgICAg
ICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDJCOgorICAgICAgICAgICAgICAgIGJ1
ZmZlci0+bV9kZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxhbmVzID0gZGVzY3JpcHRpb24uZm9ybWF0
Lm51bVBsYW5lczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVm
ZmVyLT5tX2Rlc2NyaXB0aW9uLmZvcm1hdC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBidWZmZXItPm1fcGxhbmVzW2ldLmZvdXJjYyA9IGRlc2NyaXB0aW9uLmZvcm1hdC5w
bGFuZXNbaV0uZm91cmNjOworICAgICAgICAgICAgICAgICAgICBidWZmZXItPm1fcGxhbmVzW2ld
LndpZHRoID0gZGVzY3JpcHRpb24uZm9ybWF0LnBsYW5lV2lkdGgoaSwgZGVzY3JpcHRpb24ud2lk
dGgpOworICAgICAgICAgICAgICAgICAgICBidWZmZXItPm1fcGxhbmVzW2ldLmhlaWdodCA9IGRl
c2NyaXB0aW9uLmZvcm1hdC5wbGFuZUhlaWdodChpLCBkZXNjcmlwdGlvbi5oZWlnaHQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZvciBlYWNoIHBsYW5lLCB3ZSBzcGF3biBhIGdibV9ibyBvYmplY3Qgb2Yg
dGhlIGFwcHJvcHJpYXRlIHNpemUgYW5kIGZvcm1hdC4KKyAgICAgICAgICAgIC8vIFRPRE86IEdC
TV9CT19VU0VfTElORUFSIHdpbGwgYmUgbmVlZGVkIHdoZW4gdHJhbnNmZXJyaW5nIG1lbW9yeSBp
bnRvIHRoZSBibyAoZS5nLiBjb3B5aW5nCisgICAgICAgICAgICAvLyBvdmVyIHRoZSBzb2Z0d2Fy
ZS1kZWNvZGVkIHZpZGVvIGRhdGEpLCBidXQgbWlnaHQgbm90IGJlIHJlcXVpcmVkIGZvciBiYWNr
aW5nIGUuZy4gQU5HTEUgcmVuZGVyaW5nLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1ZmZlci0+bV9kZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBwbGFuZSA9IGJ1ZmZlci0+bV9wbGFuZXNbaV07CisgICAgICAg
ICAgICAgICAgcGxhbmUuYm8gPSBnYm1fYm9fY3JlYXRlKGRldmljZS5kZXZpY2UoKSwgcGxhbmUu
d2lkdGgsIHBsYW5lLmhlaWdodCwgdWludDMyX3QocGxhbmUuZm91cmNjKSwgR0JNX0JPX1VTRV9M
SU5FQVIpOworICAgICAgICAgICAgICAgIHBsYW5lLnN0cmlkZSA9IGdibV9ib19nZXRfc3RyaWRl
KHBsYW5lLmJvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTG9jayB0aGUgYnVm
ZmVyIGFuZCByZXR1cm4gaXQuCisgICAgICAgICAgICBidWZmZXItPm1fc3RhdGUubG9ja2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUaGVyZSBpcyBhbHJlYWR5IGFuIGV4aXN0aW5nIGJ1ZmZlciBhdCB0aGlzIGxvY2F0aW9uLiBJ
ZiBtYXJrZWQgYXMgbG9ja2VkLCB1cGRhdGUgaXRzIHN0YXRlIGJ5IHJlYWRpbmcKKyAgICAgICAg
Ly8gdGhlIHJlbGVhc2UgZmxhZy4gSWYgc3RpbGwgbG9ja2VkIGFmdGVyIHRoYXQsIHdlIGhhdmUg
dG8gY29udGludWUgb3ZlciB0byB0aGUgbmV4dCBjYW5kaWRhdGUuCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1fYXJyYXkub2JqZWN0W2ldOworICAgICAgICAgICAgaWYg
KGJ1ZmZlci0+bV9zdGF0ZS5sb2NrZWQpCisgICAgICAgICAgICAgICAgYnVmZmVyLT5tX3N0YXRl
LmxvY2tlZCA9ICFidWZmZXItPm1fc3RhdGUucmVsZWFzZUZsYWcucmVsZWFzZWQoKTsKKworICAg
ICAgICAgICAgaWYgKGJ1ZmZlci0+bV9zdGF0ZS5sb2NrZWQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGJ1ZmZlciB3YXMgdW5sb2NrZWQs
IHNvIGl0IGNhbiBiZSB1c2VkLiBMb2NrIGFuZCByZXR1cm4gaXQuCisgICAgICAgIGF1dG8gYnVm
ZmVyID0gbV9hcnJheS5vYmplY3RbaV0uY29weVJlZigpOworICAgICAgICBidWZmZXItPm1fc3Rh
dGUubG9ja2VkID0gdHJ1ZTsKKworICAgICAgICAvLyBTd2FwIG91dCB0aGUgbG9jYXRlZCBidWZm
ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHF1ZXVlLiBXaGVuIHRoZSBuZXh0IGJ1ZmZlciBp
cyByZXF1ZXN0ZWQgZnJvbSB0aGlzCisgICAgICAgIC8vIHN3YXBjaGFpbiwgdGhlIHByZXZpb3Vz
bHktdXNlZCBidWZmZXJzIHdpbGwgYmUgdHJhdmVyc2VkIGFuZCB0ZXN0ZWQgZm9yIHJlbGVhc2Ug
Zmlyc3QsIG1lYW5pbmcgdGhlcmUncyBhCisgICAgICAgIC8vIGhpZ2hlciBjaGFuY2Ugd2Ugd2ls
bCBiZSBhYmxlIHRvIHJldXNlIHRoZW0sIHdpdGhvdXQgdGhlIHBlbmFsdHkgb2YgaGF2aW5nIHRv
IHRyYXZlcnNlIHRvIGRlZXAgaW50byB0aGUKKyAgICAgICAgLy8gc3dhcGNoYWluIGFycmF5Lgor
ICAgICAgICBmb3IgKCsraTsgaSA8IG1fYXJyYXkuc2l6ZSAmJiAhIW1fYXJyYXkub2JqZWN0W2ld
OyArK2kpCisgICAgICAgICAgICBzdGQ6OnN3YXAobV9hcnJheS5vYmplY3RbaSAtIDFdLCBtX2Fy
cmF5Lm9iamVjdFtpXSk7CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OkJ1ZmZlcih1
aW50MzJfdCBoYW5kbGUsIGNvbnN0IEJ1ZmZlckRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAg
ICA6IG1faGFuZGxlKGhhbmRsZSkKKyAgICAsIG1fZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pCit7
CisgICAgbV9zdGF0ZS5yZWxlYXNlRmxhZyA9IERNQUJ1ZlJlbGVhc2VGbGFnKERNQUJ1ZlJlbGVh
c2VGbGFnOjpJbml0aWFsaXplKTsKK30KKworR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6On5C
dWZmZXIoKSA9IGRlZmF1bHQ7CisKK0RNQUJ1Zk9iamVjdCBHQk1CdWZmZXJTd2FwY2hhaW46OkJ1
ZmZlcjo6Y3JlYXRlRE1BQnVmT2JqZWN0KHVpbnRwdHJfdCBoYW5kbGUpIGNvbnN0Cit7CisgICAg
RE1BQnVmT2JqZWN0IG9iamVjdChoYW5kbGUpOworICAgIG9iamVjdC5mb3JtYXQgPSBtX2Rlc2Ny
aXB0aW9uLmZvcm1hdDsKKyAgICBvYmplY3Qud2lkdGggPSBtX2Rlc2NyaXB0aW9uLndpZHRoOwor
ICAgIG9iamVjdC5oZWlnaHQgPSBtX2Rlc2NyaXB0aW9uLmhlaWdodDsKKyAgICBvYmplY3QucmVs
ZWFzZUZsYWcgPSBtX3N0YXRlLnJlbGVhc2VGbGFnLmR1cCgpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb24uZm9ybWF0Lm51bVBsYW5lczsgKytpKSB7CisgICAg
ICAgIG9iamVjdC5mZFtpXSA9IGdibV9ib19nZXRfZmQobV9wbGFuZXNbaV0uYm8pOworICAgICAg
ICBvYmplY3Qub2Zmc2V0W2ldID0gMDsKKyAgICAgICAgb2JqZWN0LnN0cmlkZVtpXSA9IG1fcGxh
bmVzW2ldLnN0cmlkZTsKKyAgICAgICAgLy8gVE9ETzogdGhlc2Ugc2hvdWxkIGJlIHRoZSBwbGFu
ZS1zcGVjaWZpYyBtb2RpZmllcnMuIFdlIGRvbid0IHVzZSB0aGVtIHlldC4KKyAgICAgICAgb2Jq
ZWN0Lm1vZGlmaWVyW2ldID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitH
Qk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6UGxhbmVEYXRhOjp+UGxhbmVEYXRhKCkKK3sKKyAg
ICBpZiAoYm8pCisgICAgICAgIGdibV9ib19kZXN0cm95KGJvKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4NDI0MTA2ZjNiNWM3ZjVk
ZDA1MzA3NzUyMWViN2FkZGEzMDA4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmgKQEAgLTAsMCArMSwx
MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5o
IgorI2luY2x1ZGUgIkRNQUJ1ZlJlbGVhc2VGbGFnLmgiCisjaW5jbHVkZSA8YXJyYXk+CisjaW5j
bHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvTm9ubW92YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworc3RydWN0IGdibV9ibzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHQk1CdWZmZXJTd2FwY2hhaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8R0JNQnVmZmVyU3dhcGNoYWluPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgLy8gVGhlIHNpemUgc2hvdWxkIGJlIGFkanVzdGVkIHRvIHRoZSB1
c2UtY2FzZS4KKyAgICAvLyBGb3IgY3ljbGljYWwgcmVuZGVyaW5nIChlLmcuIFdlYkdMKSwgRm91
ciBzaG91bGQgYmUgaWRlYWwgc2luY2Ugd2UnbGwgcmVseSBvbgorICAgIC8vIHNvbWV0aGluZyBs
aWtlIHZzeW5jIHRvIG1haW50YWluIGEgY29uc3RhbnQgZnJhbWVyYXRlIGFuZCBzdWJzZXF1ZW50
IGJ1ZmZlciBjaHVybi4KKyAgICAvLyBUaGVyZSBhcmUgb3RoZXIgc3BvcmFkaWMgcHJvZHVjZXJz
IGxpa2Ugc29mdHdhcmUtYmFzZWQgbWVkaWEgZGVjb2RlcnMgdGhhdCB3aWxsCisgICAgLy8gYmUg
cmVxdWVzdGluZyBhbmQgZmlsbGluZyBpbiBidWZmZXJzIGluIGJ1cnN0cyBidXQgc3RpbGwgaGF2
ZSB0aGVtIGRpc3BsYXllZCBvbgorICAgIC8vIGEgY3ljbGljYWwgYmFzaXMuIEVpZ2h0IHNob3Vs
ZCBiZSBlbm91Z2ggdG8gY292ZXIgdGhhdC4KKyAgICAvLyBJbiBhbnkgY2FzZSwgdGhlIHN3YXBj
aGFpbiB3aWxsIGRvIHdoYXRldmVyIGl0IGNhbiB0byByZXVzZSByZWxlYXNlZCBidWZmZXJzCisg
ICAgLy8gYW5kIG5vdCB1bm5lY2Vzc2FyaWx5IHNwYXduIG5ldyBvbmVzLCBtZWFuaW5nIHRoZSBs
aW1pdCBzaG91bGRuJ3QgYmUgcmVhY2hlZC4KKyAgICAvLyBJZiBpdCBpcywgZ2V0QnVmZmVyKCkg
d2lsbCByZXR1cm4gYSBudWxsIG9iamVjdCBhbmQgdGhlIHByb2R1Y2VyIGhhcyB0bworICAgIC8v
IGhhbmRsZSB0aGF0IHNvbWVob3cuCisgICAgZW51bSBjbGFzcyBCdWZmZXJTd2FwY2hhaW5TaXpl
IDogdW5zaWduZWQgeworICAgICAgICBGb3VyID0gNCwKKyAgICAgICAgRWlnaHQgPSA4CisgICAg
fTsKKworICAgIEdCTUJ1ZmZlclN3YXBjaGFpbihCdWZmZXJTd2FwY2hhaW5TaXplKTsKKyAgICB+
R0JNQnVmZmVyU3dhcGNoYWluKCk7CisKKyAgICBzdHJ1Y3QgQnVmZmVyRGVzY3JpcHRpb24gewor
ICAgICAgICBETUFCdWZGb3JtYXQgZm9ybWF0IHsgfTsKKyAgICAgICAgdWludDMyX3Qgd2lkdGgg
eyAwIH07CisgICAgICAgIHVpbnQzMl90IGhlaWdodCAgeyAwIH07CisgICAgfTsKKworICAgIGNs
YXNzIEJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCdWZmZXI+IHsKKyAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBCdWZmZXIo
dWludDMyX3QsIGNvbnN0IEJ1ZmZlckRlc2NyaXB0aW9uJik7CisgICAgICAgIH5CdWZmZXIoKTsK
KworICAgICAgICBETUFCdWZPYmplY3QgY3JlYXRlRE1BQnVmT2JqZWN0KHVpbnRwdHJfdCkgY29u
c3Q7CisKKyAgICAgICAgc3RydWN0IFBsYW5lRGF0YSB7CisgICAgICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQbGFuZURhdGEpOworICAgICAgICAgICAgV1RGX01BS0VfTk9OTU9WQUJMRShQ
bGFuZURhdGEpOworCisgICAgICAgICAgICBQbGFuZURhdGEoKSA9IGRlZmF1bHQ7CisgICAgICAg
ICAgICB+UGxhbmVEYXRhKCk7CisKKyAgICAgICAgICAgIERNQUJ1ZkZvcm1hdDo6Rm91ckNDIGZv
dXJjYyB7IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpJbnZhbGlkIH07CisgICAgICAgICAgICB1aW50
MzJfdCB3aWR0aCB7IDAgfTsKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAg
ICAgICAgICAgIHVpbnQzMl90IHN0cmlkZSB7IDAgfTsKKyAgICAgICAgICAgIHN0cnVjdCBnYm1f
Ym8qIGJvIHsgbnVsbHB0ciB9OworICAgICAgICB9OworCisgICAgICAgIHVpbnQzMl90IGhhbmRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlOyB9CisKKyAgICAgICAgdW5zaWduZWQgbnVtUGxh
bmVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxhbmVzOyB9Cisg
ICAgICAgIGNvbnN0IFBsYW5lRGF0YSYgcGxhbmVEYXRhKHVuc2lnbmVkIGluZGV4KSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBETUFCdWZGb3JtYXQ6OmNfbWF4
UGxhbmVzKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BsYW5lc1tpbmRleF07CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBHQk1CdWZmZXJTd2FwY2hhaW47
CisKKyAgICAgICAgdWludDMyX3QgbV9oYW5kbGUgeyAwIH07CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICBib29sIGxvY2tlZCB7IGZhbHNlIH07CisgICAgICAgICAgICBETUFCdWZSZWxl
YXNlRmxhZyByZWxlYXNlRmxhZzsKKyAgICAgICAgfSBtX3N0YXRlOworCisgICAgICAgIEJ1ZmZl
ckRlc2NyaXB0aW9uIG1fZGVzY3JpcHRpb247CisgICAgICAgIHN0ZDo6YXJyYXk8UGxhbmVEYXRh
LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBtX3BsYW5lczsKKyAgICB9OworCisgICAgUmVm
UHRyPEJ1ZmZlcj4gZ2V0QnVmZmVyKGNvbnN0IEJ1ZmZlckRlc2NyaXB0aW9uJik7CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjX21heEJ1ZmZlcnMgPSA4OworCisg
ICAgdWludDMyX3QgbV9oYW5kbGVHZW5lcmF0b3IgeyAwIH07CisgICAgc3RydWN0IHsKKyAgICAg
ICAgQnVmZmVyRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgICAgICAgIHVuc2lnbmVkIHNpemUg
eyAwIH07CisgICAgICAgIHN0ZDo6YXJyYXk8UmVmUHRyPEJ1ZmZlcj4sIGNfbWF4QnVmZmVycz4g
b2JqZWN0IHsgfTsKKyAgICB9IG1fYXJyYXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
RE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDcwZjIw
NDc0MzE1OThhMGNiMzhlNGM2ZDM1Yzg4YTQxNTU1OWJlNGEuLmMxMzg2Y2E4ZTllMGRhNjY2ZDdl
YzU3ZTE0MTdhOGJkNGRhOTA4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCkBAIC0xNjAsMTIgKzE2MCwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG1h
YnVmX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRETUFCdWZWaWRlb1NpbmtDbGFzcyoga2xh
cwogICAgICAgICAiU2luayBTdGF0aXN0aWNzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBzdGF0aWNf
Y2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklO
R1MpKSk7CiB9CiAKLXZvaWQgd2ViS2l0RE1BQnVmVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2
YXRlKFdlYktpdERNQUJ1ZlZpZGVvU2luayogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCitib29sIHdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpCiB7Ci0g
ICAgV2ViS2l0RE1BQnVmVmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0KLSAg
ICBwcml2LT5tZWRpYVBsYXllclByaXZhdGUgPSBwbGF5ZXI7Ci0gICAgd2ViS2l0VmlkZW9TaW5r
U2V0TWVkaWFQbGF5ZXJQcml2YXRlKHByaXYtPmFwcFNpbmsuZ2V0KCksIHByaXYtPm1lZGlhUGxh
eWVyUHJpdmF0ZSk7CisgICAgc3RhdGljIGJvb2wgc19lbmFibGVkID0gZmFsc2U7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIHNfZmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzX2ZsYWcsCisg
ICAgICAgIFsmXSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdfZ2V0ZW52KCJX
RUJLSVRfR1NUX0RNQUJVRl9TSU5LX0VOQUJMRUQiKTsKKyAgICAgICAgICAgIHNfZW5hYmxlZCA9
IHZhbHVlICYmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIpIHx8IGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICIxIikpOworICAgICAgICB9KTsKKyAgICByZXR1cm4g
c19lbmFibGVkOwogfQogCiBib29sIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0o
KQpAQCAtMTczLDQgKzE3NywxMiBAQCBib29sIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxh
dGZvcm0oKQogICAgIHJldHVybiBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZSgiYXBwIik7CiB9
CiAKK3ZvaWQgd2ViS2l0RE1BQnVmVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktp
dERNQUJ1ZlZpZGVvU2luayogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIpCit7CisgICAgV2ViS2l0RE1BQnVmVmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnBy
aXY7CisKKyAgICBwcml2LT5tZWRpYVBsYXllclByaXZhdGUgPSBwbGF5ZXI7CisgICAgd2ViS2l0
VmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKHByaXYtPmFwcFNpbmsuZ2V0KCksIHByaXYt
Pm1lZGlhUGxheWVyUHJpdmF0ZSk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVm
VmlkZW9TaW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5kZXggZGYyNGE2ZjBmYTM3ZDIz
NzU1MWU2ODE2OWFjYWE3OWQ3Yzk5MGZmMi4uMzI4ZThiN2ViOWMxNzcxYzkwY2Y4Mzk4NzY2MTY0
NjU4OGI3YjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuaApA
QCAtNTAsNiArNTAsNyBAQCBzdHJ1Y3QgX1dlYktpdERNQUJ1ZlZpZGVvU2lua0NsYXNzIHsKIAog
R1R5cGUgd2Via2l0X2RtYWJ1Zl92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpOwogCitib29sIHdl
YktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpOwogYm9vbCB3ZWJLaXRETUFCdWZWaWRlb1Np
bmtQcm9iZVBsYXRmb3JtKCk7CiB2b2lkIHdlYktpdERNQUJ1ZlZpZGVvU2lua1NldE1lZGlhUGxh
eWVyUHJpdmF0ZShXZWJLaXRETUFCdWZWaWRlb1NpbmsqLCBXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAppbmRleCAxM2MzZjc4NTU1NGYwM2MyZDU5MDVhNmE5ODhmZGI2MWU5ZWI2
YmVkLi4wNzMxNWI2MmU2MGY5MjBmMmNkMzE0NGQ4MjJlZTYwZWNiZThmM2E2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjgsNiArMjgs
MTEgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUg
IkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIkRN
QUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdCTUJ1ZmZlclN3YXBjaGFpbi5o
IgorI2luY2x1ZGUgIkdCTURldmljZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvTWl4ZXIuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21t
b24uaCIKQEAgLTc1LDcgKzgwLDkgQEAKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgPGdibS5oPgogI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxnc3QvYWxsb2NhdG9ycy9nc3RkbWFidWYuaD4KICNpbmNsdWRlIDxnc3QvYXVk
aW8vc3RyZWFtdm9sdW1lLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPGdzdC9w
YnV0aWxzL21pc3NpbmctcGx1Z2lucy5oPgpAQCAtOTIsNiArOTksNyBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1VuaVN0ZEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvV2Fs
bFRpbWUuaD4KIApAQCAtMTE0LDYgKzEyMiw3IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9G
cmFtZUhvbGRlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTC5oIgogI2VuZGlmIC8vIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKIApAQCAtMTU1LDIzICsxNjQsMjkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
ICAgICAsIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyhNZWRpYVRpbWU6
Onplcm9UaW1lKCkpCiAgICAgLCBtX2RyYXdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQpCiAgICAgLCBtX3JlYWR5VGltZXJI
YW5kbGVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cmVhZHlUaW1lckZpcmVkKQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICAsIG1fbmljb3NpYUxheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3Jl
YXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5
KCp0aGlzKSkpCi0jZWxzZQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgIVVTRShOSUNP
U0lBKQogICAgICwgbV9wbGF0Zm9ybUxheWVyUHJveHkoYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlHTCkpCiAjZW5kaWYKLSNlbmRpZgogI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAogICAgICwgbV9sb2dnZXIocGxheWVyLT5tZWRpYVBsYXllckxvZ2dlcigpKQog
ICAgICwgbV9sb2dJZGVudGlmaWVyKHBsYXllci0+bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkp
CiAjZW5kaWYKKyAgICAsIG1fc3dhcGNoYWluKGFkb3B0UmVmKG5ldyBHQk1CdWZmZXJTd2FwY2hh
aW4oR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXJTd2FwY2hhaW5TaXplOjpFaWdodCkpKQogewog
I2lmIFVTRShHTElCKQogICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc2V0UHJpb3JpdHkoR19QUklP
UklUWV9ERUZBVUxUX0lETEUpOwogI2VuZGlmCiAgICAgbV9pc1BsYXllclNodXR0aW5nRG93bi5z
dG9yZShmYWxzZSk7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lB
KQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMs
CisgICAgICAgIFsmXSgpIC0+IFJlZjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiB7
CisgICAgICAgICAgICBpZiAod2ViS2l0RE1BQnVmVmlkZW9TaW5rSXNFbmFibGVkKCkgJiYgd2Vi
S2l0RE1BQnVmVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eUdMKTsKKyAgICAgICAgfSgpKSk7CisjZW5kaWYKKwogICAgIGVuc3VyZUdTdHJlYW1l
ckluaXRpYWxpemVkKCk7CiAgICAgbV9hdWRpb1NpbmsgPSBjcmVhdGVBdWRpb1NpbmsoKTsKIApA
QCAtMjg2Nyw3ICsyODgyLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBl
cmZvcm1UYXNrQXRNZWRpYVRpbWUoRnVuY3Rpb248dm9pZCgpPiYmIHRhc2sKIFBsYXRmb3JtTGF5
ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7
CiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOworICAg
IHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKICNlbHNlCiAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odGhpcyk7CiAjZW5kaWYKQEAgLTI5Nzks
NiArMjk5NCwyMzEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0
dXJlVG9Db21wb3NpdG9yKCkKICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJv
eHkpOwogI2VuZGlmCiB9CisKKy8vIEdTdHJlYW1lcidzIGdzdF92aWRlb19mb3JtYXRfdG9fZm91
cmNjKCkgZG9lc24ndCBjb3ZlciBSR0ItbGlrZSBmb3JtYXRzLCBzbyB3ZQorLy8gcHJvdmlkZSB0
aGUgYXBwcm9wcmlhdGUgRm91ckNDIHZhbHVlcyBmb3IgdGhvc2UgdGhyb3VnaCB0aGlzIGZ1bmNp
b24uCitzdGF0aWMgdWludDMyX3QgZm91cmNjVmFsdWUoR3N0VmlkZW9Gb3JtYXQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6
CisgICAgICAgIHJldHVybiB1aW50MzJfdChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODgp
OworICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgorICAgICAgICByZXR1cm4gdWludDMy
X3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19G
T1JNQVRfeFJHQjoKKyAgICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpCR1JYODg4OCk7CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6CisgICAgICAgIHJl
dHVybiB1aW50MzJfdChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6UkdCWDg4ODgpOworICAgIGNhc2Ug
R1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9y
bWF0OjpGb3VyQ0M6OkFCR1I4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToK
KyAgICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4OCk7
CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6CisgICAgICAgIHJldHVybiB1aW50MzJf
dChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QkdSQTg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVPX0ZP
Uk1BVF9BQkdSOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OlJHQkE4ODg4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZ3N0X3ZpZGVvX2Zvcm1hdF90b19mb3VyY2MoZm9ybWF0KTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hETUFCdWZUb0NvbXBvc2l0b3IoKQoreworICAg
IExvY2tlciBzYW1wbGVMb2NrZXIgeyBtX3NhbXBsZU11dGV4IH07CisgICAgaWYgKCFHU1RfSVNf
U0FNUExFKG1fc2FtcGxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogY2Fw
cyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOworICAgIGlmICghY2FwcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3Rf
dmlkZW9faW5mb19pbml0KCZ2aWRlb0luZm8pOworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJv
bV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBi
dWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIobV9zYW1wbGUuZ2V0KCkpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBtZXRhID0gZ3N0X2J1ZmZlcl9n
ZXRfdmlkZW9fbWV0YShidWZmZXIpOworICAgIGlmIChtZXRhKSB7CisgICAgICAgIEdTVF9WSURF
T19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pID0gbWV0YS0+d2lkdGg7CisgICAgICAgIEdTVF9WSURF
T19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKSA9IG1ldGEtPmhlaWdodDsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWV0YS0+bl9wbGFuZXM7ICsraSkgeworICAgICAgICAgICAg
R1NUX1ZJREVPX0lORk9fUExBTkVfT0ZGU0VUKCZ2aWRlb0luZm8sIGkpID0gbWV0YS0+b2Zmc2V0
W2ldOworICAgICAgICAgICAgR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8s
IGkpID0gbWV0YS0+c3RyaWRlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byYgcHJv
eHkgPSBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKTsKKyAgICBBU1NFUlQoaXM8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zj4ocHJveHkpKTsKKworICAgIGF1dG8qIGZlYXR1cmVz
ID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzKGNhcHMsIDApOworICAgIGlmIChnc3RfY2Fwc19mZWF0
dXJlc19jb250YWlucyhmZWF0dXJlcywgR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfRE1BQlVGKSkg
eworICAgICAgICAvLyBJbiBjYXNlIG9mIGEgaGFyZHdhcmUgZGVjb2RlciB0aGF0J3MgeWllbGRp
bmcgZG1hYnVmIG1lbW9yeSwgd2UgY2FuIHRha2UgdGhlIHJlbGV2YW50IGRhdGEgYW5kCisgICAg
ICAgIC8vIHB1c2ggaXQgaW50byB0aGUgY29tcG9zaXRpb24gcHJvY2Vzcy4KKworICAgICAgICAr
K21fc2FtcGxlQ291bnQ7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBwcm94eS5sb2NrKCkgfTsK
KyAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIFByb3ZpZGUgdGhlIERNQUJ1Zk9iamVjdCB3aXRoIGEgcmVsZXZhbnQgaGFuZGxl
IChtZW1vcnkgYWRkcmVzcykuIFdoZW4gcHJvdmlkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLAorICAg
ICAgICAvLyB0aGUgbGFtYmRhIHdpbGwgYmUgaW52b2tlZCBhbmQgYWxsIGRtYWJ1ZiBkYXRhIGlz
IGZpbGxlZCBpbi4KKyAgICAgICAgZG93bmNhc3Q8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1Zj4ocHJveHkpLnB1c2hETUFCdWYoCisgICAgICAgICAgICBETUFCdWZPYmplY3Qo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdzdF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVy
LCAwKSkpLAorICAgICAgICAgICAgWyZdKGF1dG8mJiBvYmplY3QpIHsKKyAgICAgICAgICAgICAg
ICBvYmplY3QuZm9ybWF0ID0gRE1BQnVmRm9ybWF0OjpjcmVhdGUoZm91cmNjVmFsdWUoR1NUX1ZJ
REVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0Lndp
ZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgICAgICAgICAgICAg
b2JqZWN0LmhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAg
ICAgICAgICAgICAgIC8vIFRPRE86IHJlbGVhc2UgbWVjaGFuaXNtIGZvciBhIGRlY29kZXItcHJv
dmlkZWQgZG1hYnVmIGlzIGEgYml0IHRyaWNreS4gVGhlIGRtYWJ1ZiBvYmplY3QKKyAgICAgICAg
ICAgICAgICAvLyBpdHNlbGYgZG9lc24ndCBwcm92aWRlIGFueXRoaW5nIHVzZWZ1bCwgYnV0IHRo
ZSBkZWNvZGVyIHdvbid0IHJldXNlIHRoZSBkbWFidWYgdW50aWwgdGhlCisgICAgICAgICAgICAg
ICAgLy8gcmVsZXZhbnQgR3N0U2FtcGxlIHJlZmVyZW5jZSBpcyBkcm9wcGVkIGJ5IHRoZSBkb3du
c3RyZWFtIHBpcGVsaW5lLiBTbyBmb3IgdGhpcyB0byB3b3JrLAorICAgICAgICAgICAgICAgIC8v
IHRoZXJlJ3MgYSBuZWVkIHRvIHNvbWVob3cgYXNzb2NpYXRlIHRoZSBHc3RTYW1wbGUgcmVmZXJl
bmNlIHdpdGggdGhpcyByZWxlYXNlIGZsYWcgc28gdGhhdAorICAgICAgICAgICAgICAgIC8vIHRo
ZSByZWZlcmVuY2UgaXMgZHJvcHBlZCBvbmNlIHRoZSByZWxlYXNlIGZsYWcgaXMgc2lnbmFsbGVk
LiBUaGVyZSdzIHdheXMgdG8gYWNoaWV2ZSB0aGF0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBs
ZWZ0IGZvciBsYXRlci4KKyAgICAgICAgICAgICAgICBvYmplY3QucmVsZWFzZUZsYWcgPSBETUFC
dWZSZWxlYXNlRmxhZyB7IH07CisKKyAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBwbGFuZSwg
dGhlIHJlbGV2YW50IGRhdGEgKHN0cmlkZSwgb2Zmc2V0LCBza2lwLCBkbWFidWYgZmQpIGlzIHJl
dHJpZXZlZCBhbmQgYXNzaWduZWQKKyAgICAgICAgICAgICAgICAvLyBhcyBhcHByb3ByaWF0ZS4g
TW9kaWZpZXIgdmFsdWVzIGFyZSB6ZXJvZWQgb3V0IGZvciBub3csIHNpbmNlIEdTdHJlYW1lciBk
b2Vzbid0IHlldCBwcm92aWRlCisgICAgICAgICAgICAgICAgLy8gdGhlIGluZm9ybWF0aW9uLgor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvYmplY3QuZm9ybWF0Lm51
bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGdzaXplIG9mZnNldCA9IEdTVF9W
SURFT19JTkZPX1BMQU5FX09GRlNFVCgmdmlkZW9JbmZvLCBpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgbWVtaWQgPSAwOworICAgICAgICAgICAgICAgICAgICBndWludCBsZW5ndGggPSAw
OworICAgICAgICAgICAgICAgICAgICBnc2l6ZSBza2lwID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkoYnVmZmVyLCBvZmZzZXQsIDEsICZtZW1pZCwg
Jmxlbmd0aCwgJnNraXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBtZW0gPSBn
c3RfYnVmZmVyX3BlZWtfbWVtb3J5KGJ1ZmZlciwgbWVtaWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0LmZkW2ldID0gZHVwQ2xvc2VPbkV4ZWMoZ3N0X2RtYWJ1Zl9tZW1vcnlfZ2V0
X2ZkKG1lbSkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbWVtLT5vZmZzZXQg
KyBza2lwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdC5mZFtpXSA9IC0xOworCisgICAgICAgICAgICAgICAgICAgIGdpbnQgY29tcFtH
U1RfVklERU9fTUFYX0NPTVBPTkVOVFNdOworICAgICAgICAgICAgICAgICAgICBnc3RfdmlkZW9f
Zm9ybWF0X2luZm9fY29tcG9uZW50KHZpZGVvSW5mby5maW5mbywgaSwgY29tcCk7CisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdC5vZmZzZXRbaV0gPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdC5zdHJpZGVbaV0gPSBHU1RfVklERU9fSU5GT19QTEFORV9TVFJJREUoJnZpZGVv
SW5mbywgaSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tb2RpZmllcltpXSA9IDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHRoZSBkZWNvZGVy
IGlzIGV4cG9ydGluZyByYXcgbWVtb3J5LCB3ZSBoYXZlIHRvIHVzZSB0aGUgc3dhcGNoYWluIHRv
IGFsbG9jYXRlIGFwcHJvcHJpYXRlIGJ1ZmZlcnMKKyAgICAvLyBhbmQgY29weSBvdmVyIHRoZSBk
YXRhIGZvciBlYWNoIHBsYW5lLgorICAgIEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyRGVzY3Jp
cHRpb24gYnVmZmVyRGVzY3JpcHRpb24geworICAgICAgICBETUFCdWZGb3JtYXQ6OmNyZWF0ZShm
b3VyY2NWYWx1ZShHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbykpKSwKKyAgICAgICAg
R1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURFT19JTkZPX0hFSUdIVCgm
dmlkZW9JbmZvKSwKKyAgICB9OworICAgIGlmIChidWZmZXJEZXNjcmlwdGlvbi5mb3JtYXQuZm91
cmNjID09IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpJbnZhbGlkKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHN3YXBjaGFpbkJ1ZmZlciA9IG1fc3dhcGNoYWluLT5nZXRCdWZmZXIoYnVmZmVy
RGVzY3JpcHRpb24pOworCisgICAgLy8gU291cmNlIGhlbHBlciBzdHJ1Y3QsIG1hcHMgdGhlIHJh
dyBtZW1vcnkgYW5kIGV4cG9zZXMgdGhlIG1hcHBlZCBkYXRhIGZvciBjb3B5aW5nLgorICAgIHN0
cnVjdCBTb3VyY2UgeworICAgICAgICBTb3VyY2UoR3N0TWVtb3J5KiBtZW1vcnksIGdzaXplIG9m
ZnNldCwgdWludDMyX3Qgc3RyaWRlLCB1aW50MzJfdCBoZWlnaHQpCisgICAgICAgICAgICA6IG1l
bW9yeShtZW1vcnkpCisgICAgICAgICAgICAsIHN0cmlkZShzdHJpZGUpCisgICAgICAgICAgICAs
IGhlaWdodChoZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ3N0X21lbW9yeV9t
YXAobWVtb3J5LCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIGRhdGEgPSAmbWFw
SW5mby5kYXRhW29mZnNldF07CisgICAgICAgIH0KKworICAgICAgICB+U291cmNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgICAgIGdzdF9tZW1vcnlf
dW5tYXAobWVtb3J5LCAmbWFwSW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHZhbGlk
IHsgZmFsc2UgfTsKKyAgICAgICAgR3N0TWVtb3J5KiBtZW1vcnkgeyBudWxscHRyIH07CisgICAg
ICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICAgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIg
fTsKKyAgICAgICAgdWludDMyX3Qgc3RyaWRlIHsgMCB9OworICAgICAgICB1aW50MzJfdCBoZWln
aHQgeyAwIH07CisgICAgfTsKKworICAgIC8vIERlc3RpbmF0aW9uIGhlbHBlciBzdHJ1Y3QsIG1h
cHMgdGhlIGdibV9ibyBvYmplY3QgaW50byBDUFUtbWVtb3J5IHNwYWNlIGFuZCBjb3BpZXMgZnJv
bSB0aGUgYWNjb21wYW55aW5nIFNvdXJjZSBpbiBmaWxsKCkuCisgICAgc3RydWN0IERlc3RpbmF0
aW9uIHsKKyAgICAgICAgRGVzdGluYXRpb24oc3RydWN0IGdibV9ibyogYm8sIHVpbnQzMl90IHdp
ZHRoLCB1aW50MzJfdCBoZWlnaHQpCisgICAgICAgICAgICA6IGJvKGJvKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtYXAgPSBnYm1fYm9fbWFwKGJvLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBHQk1f
Qk9fVFJBTlNGRVJfV1JJVEUsICZzdHJpZGUsICZtYXBEYXRhKTsKKyAgICAgICAgICAgIGlmICgh
bWFwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFsaWQgPSB0cnVl
OworICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1hcCk7Cisg
ICAgICAgIH0KKworICAgICAgICB+RGVzdGluYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodmFsaWQpCisgICAgICAgICAgICAgICAgZ2JtX2JvX3VubWFwKGJvLCBtYXBEYXRhKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsbChjb25zdCBTb3VyY2UmIHNvdXJjZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yICh1aW50MzJfdCB5ID0gMDsgeSA8IHNvdXJjZS5oZWln
aHQ7ICsreSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHNvdXJjZURhdGEgPSAmc291cmNlLmRh
dGFbeSAqIHNvdXJjZS5zdHJpZGVdOworICAgICAgICAgICAgICAgIGF1dG8qIGRlc3RpbmF0aW9u
RGF0YSA9ICZkYXRhW3kgKiBzdHJpZGVdOworICAgICAgICAgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbkRhdGEsIHNvdXJjZURhdGEsIHN0ZDo6bWluKHNvdXJjZS5zdHJpZGUsIHN0cmlkZSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB2YWxpZCB7IGZhbHNlIH07
CisgICAgICAgIHN0cnVjdCBnYm1fYm8qIGJvIHsgbnVsbHB0ciB9OworICAgICAgICB2b2lkKiBt
YXAgeyBudWxscHRyIH07CisgICAgICAgIHZvaWQqIG1hcERhdGEgeyBudWxscHRyIH07CisgICAg
ICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAgIHVpbnQzMl90IHN0cmlkZSB7
IDAgfTsKKyAgICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdTVF9WSURFT19J
TkZPX05fUExBTkVTKCZ2aWRlb0luZm8pOyArK2kpIHsKKyAgICAgICAgZ2ludCBjb21wW0dTVF9W
SURFT19NQVhfQ09NUE9ORU5UU107CisgICAgICAgIGdzdF92aWRlb19mb3JtYXRfaW5mb19jb21w
b25lbnQodmlkZW9JbmZvLmZpbmZvLCBpLCBjb21wKTsKKworICAgICAgICBhdXRvJiBwbGFuZURh
dGEgPSBzd2FwY2hhaW5CdWZmZXItPnBsYW5lRGF0YShpKTsKKyAgICAgICAgZ3NpemUgb2Zmc2V0
ID0gR1NUX1ZJREVPX0lORk9fUExBTkVfT0ZGU0VUKCZ2aWRlb0luZm8sIGkpOworICAgICAgICBn
dWludCBzdHJpZGUgPSBHU1RfVklERU9fSU5GT19QTEFORV9TVFJJREUoJnZpZGVvSW5mbywgaSk7
CisKKyAgICAgICAgZ3VpbnQgbWVtaWQsIGxlbmd0aDsKKyAgICAgICAgZ3NpemUgc2tpcDsKKyAg
ICAgICAgaWYgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkoYnVmZmVyLCBvZmZzZXQsIDEsICZtZW1p
ZCwgJmxlbmd0aCwgJnNraXApKSB7CisgICAgICAgICAgICBhdXRvKiBtZW0gPSBnc3RfYnVmZmVy
X3BlZWtfbWVtb3J5KGJ1ZmZlciwgbWVtaWQpOworCisgICAgICAgICAgICBTb3VyY2Ugc291cmNl
KG1lbSwgb2Zmc2V0LCBzdHJpZGUsIHBsYW5lRGF0YS5oZWlnaHQpOworICAgICAgICAgICAgRGVz
dGluYXRpb24gZGVzdGluYXRpb24ocGxhbmVEYXRhLmJvLCBwbGFuZURhdGEud2lkdGgsIHBsYW5l
RGF0YS5oZWlnaHQpOworCisgICAgICAgICAgICBpZiAoc291cmNlLnZhbGlkICYmIGRlc3RpbmF0
aW9uLnZhbGlkKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmZpbGwoc291cmNlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgICsrbV9zYW1wbGVDb3VudDsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgcHJveHkubG9jaygpIH07CisgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGUgdXBkYXRlZCBidWZmZXIgaXMgcHVzaGVkIGludG8gdGhlIGNv
bXBvc2l0aW9uIHN0YWdlLiBUaGUgRE1BQnVmT2JqZWN0IGhhbmRsZSB1c2VzIHRoZSBzd2FwY2hh
aW4gYWRkcmVzcyBhcyB0aGUgaGFuZGxlIGJhc2UuCisgICAgLy8gV2hlbiB0aGUgYnVmZmVyIGlz
IHB1c2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHRoZSBsYW1iZGEgd2lsbCBiZSBpbnZva2VkIHRv
IHJldHJpZXZlIGEgbW9yZSBjb21wbGV0ZSBETUFCdWZPYmplY3QgZm9yIHRoZQorICAgIC8vIGdp
dmVuIEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyIG9iamVjdC4KKyAgICBkb3duY2FzdDxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmPihwcm94eSkucHVzaERNQUJ1ZigKKyAg
ICAgICAgRE1BQnVmT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N3YXBjaGFp
bi5nZXQoKSkgKyBzd2FwY2hhaW5CdWZmZXItPmhhbmRsZSgpKSwKKyAgICAgICAgWyZdKGF1dG8m
JiBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBzd2FwY2hhaW5CdWZmZXItPmNyZWF0ZURN
QUJ1Zk9iamVjdChvYmplY3QuaGFuZGxlKTsKKyAgICAgICAgfSk7Cit9CiAjZW5kaWYgLy8gVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cmVwYWludCgpCkBAIC0zMTg1LDggKzM0MjUsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogI2VuZGlmCiAgICAg
ICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogICAgICAgICBtX2RyYXdDb25kaXRp
b24ud2FpdChtX2RyYXdMb2NrKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworI2lmIFVTRShO
SUNPU0lBKQorICAgICAgICBpZiAoaXM8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1Zj4oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpKSB7CisgICAgICAgICAgICBwdXNoRE1BQnVm
VG9Db21wb3NpdG9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgor
CiAgICAgICAgIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7CisgICAgfQogI2VuZGlmIC8vIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKIH0KIApAQCAtMzQyNiw2ICszNjc0LDIxIEBAIE1lZGlhUGxh
eWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bW92aWVMb2Fk
VHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlOjpEb3du
bG9hZDsKIH0KIAorR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVWaWRlb1NpbmtETUFCdWYoKQoreworICAgIGlmICghd2ViS2l0RE1BQnVmVmlkZW9TaW5rSXNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghd2ViS2l0RE1BQnVm
VmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSgpKSB7CisgICAgICAgIGdfd2FybmluZygiV2ViS2l0IHdh
c24ndCBhYmxlIHRvIGZpbmQgdGhlIERNQUJ1ZiB2aWRlbyBzaW5rIGRlcGVuZGVuY2llcy4gSGFy
ZHdhcmUtYWNjZWxlcmF0ZWQgemVyby1jb3B5IHZpZGVvIHJlbmRlcmluZyB3b24ndCBiZSBhY2hp
ZXZhYmxlIHdpdGggdGhpcyBwbHVnaW4uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIEdzdEVsZW1lbnQqIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndl
YmtpdGRtYWJ1ZnZpZGVvc2luayIsIG51bGxwdHIpOworICAgIEFTU0VSVChzaW5rKTsKKyAgICB3
ZWJLaXRETUFCdWZWaWRlb1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX0RNQUJVRl9W
SURFT19TSU5LKHNpbmspLCB0aGlzKTsKKyAgICByZXR1cm4gc2luazsKK30KKwogI2lmIFVTRShH
U1RSRUFNRVJfR0wpCiBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNy
ZWF0ZVZpZGVvU2lua0dMKCkKIHsKQEAgLTM1MTcsOCArMzc4MCwxMCBAQCBHc3RFbGVtZW50KiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luaygpCiAgICAgcmV0dXJu
IG1fdmlkZW9TaW5rLmdldCgpOwogI2VuZGlmCiAKKyAgICBpZiAoIW1fdmlkZW9TaW5rICYmIG1f
Y2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkKKyAgICAgICAgbV92aWRlb1NpbmsgPSBjcmVhdGVW
aWRlb1NpbmtETUFCdWYoKTsKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmIChtX2NhblJl
bmRlcmluZ0JlQWNjZWxlcmF0ZWQpCisgICAgaWYgKCFtX3ZpZGVvU2luayAmJiBtX2NhblJlbmRl
cmluZ0JlQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fdmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5r
R0woKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKaW5kZXggZTM4MDc1YjJmYzI2ZDk0M2JmOWEwMDY1NDMzYzdiYmFhZTVlMDYyMy4uNjRm
MDU5Y2RkMWFmMjY0ZmY0NmQ2YzAwOWI4YWNiZjY1YzMxZWJkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTA1LDYgKzEwNSw4IEBAIGNsYXNz
IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI7CiBjbGFzcyBNZWRpYVBsYXllclJlcXVl
c3RJbnN0YWxsTWlzc2luZ1BsdWdpbnNDYWxsYmFjazsKIGNsYXNzIFZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOwogCitjbGFzcyBHQk1CdWZmZXJTd2FwY2hhaW47CisKIHZvaWQgcmVnaXN0ZXJX
ZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpOwogCiAvLyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24g
Zm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjb25zdHJ1Y3QgV2Vha1B0cnMgb24gYW5v
dGhlciB0aHJlYWQuCkBAIC0yNjcsMTIgKzI2OSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBz
aG91bGRJZ25vcmVJbnRyaW5zaWNTaXplKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlm
CiAKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmtETUFCdWYoKTsKICNpZiBVU0UoR1NU
UkVBTUVSX0dMKQogICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lua0dMKCk7CiAjZW5kaWYK
IAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21w
b3NpdG9yKCk7CisgICAgdm9pZCBwdXNoRE1BQnVmVG9Db21wb3NpdG9yKCk7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgZmluYWw7CiAjZWxzZQpAQCAt
NTA4LDcgKzUxMiw3IEBAIHByaXZhdGU6CiAgICAgUnVuTG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyPiBtX3JlYWR5VGltZXJIYW5kbGVyOwogI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKICNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWY8Tmljb3NpYTo6Q29udGVudExheWVy
PiBtX25pY29zaWFMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25p
Y29zaWFMYXllcjsKICNlbHNlCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwogI2VuZGlmCkBAIC01NzMsNiArNTc3LDggQEAg
cHJpdmF0ZToKICAgICBSZWY8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lk
KiBtX2xvZ0lkZW50aWZpZXI7CiAjZW5kaWYKKworICAgIFJlZlB0cjxHQk1CdWZmZXJTd2FwY2hh
aW4+IG1fc3dhcGNoYWluOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
dGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKaW5kZXggMDIy
ODQ0YjMyNjcwNDUzYzZjYzc3NTU0NGMyOTZiNWQ2MDgzYzRlOS4uOTIzNzVlOTIwMTIyMTc5ZDgz
NWVhNTFlMWYwNjYwYWUwYjEwZmJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwCkBAIC0zMSwx
NSArMzEsMjEgQEAKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKIAorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5R0wuaCIKIAogbmFtZXNwYWNlIE5pY29zaWEgewogCiBhdXRv
IENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KENsaWVudCYgY2xp
ZW50KSAtPiBGYWN0b3J5Cit7CisgICAgcmV0dXJuIGNyZWF0ZUZhY3RvcnkoY2xpZW50LCBhZG9w
dFJlZigqbmV3IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTCkpOwor
fQorCithdXRvIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KENs
aWVudCYgY2xpZW50LCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4mJiBwcm94eSkgLT4gRmFjdG9yeQogewogICAgIHJldHVybiBGYWN0b3J5KAotICAgICAgICBb
JmNsaWVudF0oQ29udGVudExheWVyJikgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KGNsaWVudCwgYWRvcHRSZWYoKm5ldyBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wpKTsKKyAgICAgICAgWyZjbGll
bnQsIHByb3h5ID0gV1RGTW92ZShwcm94eSldKENvbnRlbnRMYXllciYpIG11dGFibGUgeworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KGNsaWVudCwgV1RGTW92ZShwcm94eSkpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGwuaAppbmRleCA5N2UzMDU5MTNjYzg0MjZiMzdiODM3YzRkM2U2OWRhN2UzYjMwNzZiLi41OTM2
OTc1MDI1YmRiODQyYzQ5YmQzNzdkMzMwYjk2MTBiNDJhMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwu
aApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyBGYWN0b3J5
IGNyZWF0ZUZhY3RvcnkoQ2xpZW50Jik7CisgICAgc3RhdGljIEZhY3RvcnkgY3JlYXRlRmFjdG9y
eShDbGllbnQmLCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4m
Jik7CiAKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbChDbGllbnQm
LCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4mJik7CiAgICAg
dmlydHVhbCB+Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hNWJmMWNhOTVkY2FjYTc1Nzc5NGYyZGQ2OTZjN2Y3YjUyOGYzYzc3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TEhlYWRlcnMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxm
Y250bC5oPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dW5pc3RkLmg+
CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5j
bHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0MgY3JlYXRl
SW1hZ2VLSFIoKQoreworICAgIHN0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0Mgc19jcmVh
dGVJbWFnZUtIUjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFnOworICAgIHN0ZDo6
Y2FsbF9vbmNlKHNfZmxhZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfY3JlYXRlSW1h
Z2VLSFIgPSByZWludGVycHJldF9jYXN0PFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQz4oZWdsR2V0
UHJvY0FkZHJlc3MoImVnbENyZWF0ZUltYWdlS0hSIikpOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gc19jcmVhdGVJbWFnZUtIUjsKK30KKworc3RhdGljIFBGTkVHTERFU1RST1lJTUFHRUtIUlBS
T0MgZGVzdHJveUltYWdlS0hSKCkKK3sKKyAgICBzdGF0aWMgUEZORUdMREVTVFJPWUlNQUdFS0hS
UFJPQyBzX2Rlc3Ryb3lJbWFnZUtIUjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFn
OworICAgIHN0ZDo6Y2FsbF9vbmNlKHNfZmxhZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAg
IHNfZGVzdHJveUltYWdlS0hSID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xERVNUUk9ZSU1BR0VL
SFJQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZWdsRGVzdHJveUltYWdlS0hSIikpOworICAgICAg
ICB9KTsKKyAgICByZXR1cm4gc19kZXN0cm95SW1hZ2VLSFI7Cit9CisKK3N0cnVjdCBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRh
IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICB+RUdMSW1hZ2VE
YXRhKCkKKyAgICB7CisgICAgICAgIGlmIChudW1JbWFnZXMpIHsKKyAgICAgICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMobnVtSW1hZ2VzLCB0ZXh0dXJlLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1JbWFnZXM7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmIChpbWFnZVtpXSAhPSBFR0xfTk9fSU1BR0VfS0hSKQorICAgICAgICAgICAgICAgICAgICBk
ZXN0cm95SW1hZ2VLSFIoKShQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLmVnbERpc3BsYXkoKSwgaW1hZ2VbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgaGVpZ2h0
IHsgMCB9OworICAgIHVuc2lnbmVkIG51bUltYWdlcyB7IDAgfTsKKyAgICBzdGQ6OmFycmF5PEdM
dWludCwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gdGV4dHVyZSB7IDAsIDAsIDAsIDAgfTsK
KyAgICBzdGQ6OmFycmF5PEVHTEltYWdlS0hSLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBp
bWFnZSB7IEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9L
SFIsIEVHTF9OT19JTUFHRV9LSFIgfTsKK307CisKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHlETUFCdWY6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRl
ZmF1bHQ7CitUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjp+VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZigpID0gZGVmYXVsdDsKKwordm9pZCBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJl
YWQoQ29tcG9zaXRvciogY29tcG9zaXRvciwgVGV4dHVyZU1hcHBlckxheWVyKiB0YXJnZXRMYXll
cikKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUaHJlYWQpCisgICAg
ICAgIG1fY29tcG9zaXRvclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKKyNlbmRpZgorICAg
IEFTU0VSVChtX2NvbXBvc2l0b3JUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY29tcG9zaXRvcik7CisgICAgQVNTRVJUKHRhcmdldExheWVyKTsKKworICAgIHsKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBtX2NvbXBvc2l0b3IgPSBj
b21wb3NpdG9yOworICAgICAgICBtX3RhcmdldExheWVyID0gdGFyZ2V0TGF5ZXI7CisgICAgfQor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmludmFsaWRh
dGUoKQoreworICAgIEFTU0VSVChtX2NvbXBvc2l0b3JUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wb3NpdG9yVGhyZWFkID0gbnVsbHB0cjsK
KyNlbmRpZgorCisgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworCisgICAgbV9wZW5kaW5n
TGF5ZXIgPSBudWxscHRyOworICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBudWxscHRyOworICAgIG1f
bGF5ZXJzID0geyB9OworCisgICAgbV9jb21wb3NpdG9yID0gbnVsbHB0cjsKKyAgICBtX3Rhcmdl
dExheWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5RE1BQnVmOjpzd2FwQnVmZmVyKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07
CisgICAgaWYgKCFtX3RhcmdldExheWVyIHx8ICFtX3BlbmRpbmdMYXllcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBwcmV2aW91c0xheWVyID0gV1RGTW92ZShtX2NvbW1pdHRlZExheWVy
KTsKKyAgICBtX2NvbW1pdHRlZExheWVyID0gV1RGTW92ZShtX3BlbmRpbmdMYXllcik7CisgICAg
bV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllcihtX2NvbW1pdHRlZExheWVyLmdldCgpKTsK
KworICAgIC8vIFRoZSBwcmV2aW91cyBhbmQganVzdC1jb21taXR0ZWQgbGF5ZXJzIHNob3VsZG4n
dCBiZSB0aGUgc2FtZS4gQnV0IGlmIHRoZXkgYXJlLCBkb24ndCBwZXJmb3JtIGEgcmVsZWFzZS4K
KyAgICBBU1NFUlQoIXByZXZpb3VzTGF5ZXIgfHwgcHJldmlvdXNMYXllciAhPSBtX2NvbW1pdHRl
ZExheWVyKTsKKyAgICBpZiAocHJldmlvdXNMYXllciAmJiBwcmV2aW91c0xheWVyICE9IG1fY29t
bWl0dGVkTGF5ZXIpCisgICAgICAgIHByZXZpb3VzTGF5ZXItPnJlbGVhc2UoKTsKKworICAgIGlm
ICghbV9jb21taXR0ZWRMYXllci0+bV9pbWFnZURhdGEpCisgICAgICAgIG1fY29tbWl0dGVkTGF5
ZXItPm1faW1hZ2VEYXRhID0gRE1BQnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YShtX2NvbW1p
dHRlZExheWVyLT5tX29iamVjdCk7CisgICAgbV9jb21taXR0ZWRMYXllci0+bV9hZ2UgPSAwOwor
CisgICAgLy8gUmVtb3ZlIGFueSBzdGFsZSBsYXllcnMsIGUuZy4gaWYgYSBsYXllciBoYXMgZ29u
ZSB1bnVzZWQgZm9yID5jX21heGltdW1BZ2Ugc3dhcHMgb3IgZG9lc24ndCBtYXRjaCB0aGUgbGF0
ZXN0IHNpemUuCisgICAgYXV0byYgY29tbWl0dGVkT2JqZWN0ID0gbV9jb21taXR0ZWRMYXllci0+
bV9vYmplY3Q7CisgICAgYXV0byBpc1N0YWxlTGF5ZXIgPQorICAgICAgICBbJl0oYXV0byYgaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIGxheWVyID0gaXQudmFsdWUuZ2V0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gbGF5ZXIubV9hZ2UgPiBETUFCdWZMYXllcjo6Y19tYXhpbXVtQWdl
CisgICAgICAgICAgICAgICAgfHwgIShsYXllci5tX29iamVjdC53aWR0aCA9PSBjb21taXR0ZWRP
YmplY3Qud2lkdGggJiYgbGF5ZXIubV9vYmplY3QuaGVpZ2h0ID09IGNvbW1pdHRlZE9iamVjdC5o
ZWlnaHQpOworICAgICAgICB9OworCisgICAgYm9vbCBoYXNTdGFsZUxheWVycyA9IGZhbHNlOwor
ICAgIGZvciAoYXV0byBpdCA9IG1fbGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGF5ZXJzLmVuZCgp
OyArK2l0KSB7CisgICAgICAgICsraXQtPnZhbHVlLT5tX2FnZTsKKyAgICAgICAgaGFzU3RhbGVM
YXllcnMgfD0gaXNTdGFsZUxheWVyKCppdCk7CisgICAgfQorCisgICAgaWYgKGhhc1N0YWxlTGF5
ZXJzKQorICAgICAgICBtX2xheWVycy5yZW1vdmVJZihpc1N0YWxlTGF5ZXIpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OnB1c2hETUFCdWYoUmVmPERN
QUJ1ZkxheWVyPiYmIGRtYWJ1ZkxheWVyKQoreworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkp
OworCisgICAgLy8gVGhlIHBlbmRpbmcgYW5kIGp1c3QtcHVzaGVkIGxheWVycyBzaG91bGRuJ3Qg
YmUgdGhlIHNhbWUuIEJ1dCBpZiB0aGV5IGFyZSwgZG9uJ3QgcGVyZm9ybSBhIHJlbGVhc2UuCisg
ICAgQVNTRVJUKCFtX3BlbmRpbmdMYXllciB8fCBtX3BlbmRpbmdMYXllciAhPSBkbWFidWZMYXll
ci5wdHIoKSk7CisgICAgaWYgKG1fcGVuZGluZ0xheWVyICYmIG1fcGVuZGluZ0xheWVyICE9IGRt
YWJ1ZkxheWVyLnB0cigpKQorICAgICAgICBtX3BlbmRpbmdMYXllci0+cmVsZWFzZSgpOworCisg
ICAgbV9wZW5kaW5nTGF5ZXIgPSBXVEZNb3ZlKGRtYWJ1ZkxheWVyKTsKKyAgICBpZiAobV9jb21w
b3NpdG9yKQorICAgICAgICBtX2NvbXBvc2l0b3ItPm9uTmV3QnVmZmVyQXZhaWxhYmxlKCk7Cit9
CisKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpE
TUFCdWZMYXllcihETUFCdWZPYmplY3QmJiBvYmplY3QsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3Mg
ZmxhZ3MpCisgICAgOiBtX29iamVjdChXVEZNb3ZlKG9iamVjdCkpCisgICAgLCBtX2ZsYWdzKGZs
YWdzKQoreyB9CisKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1
ZkxheWVyOjp+RE1BQnVmTGF5ZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSkKK3sKKyAgICBpZiAoIW1faW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUT0RPOiB0aGlzIGlzIHRoZSBCVC42MDEgY29sb3JzcGFjZSBjb252ZXJzaW9uIG1hdHJpeC4g
VGhlIGV4YWN0IGRlc2lyZWQgY29sb3JzcGFjZSBzaG91bGQgYmUgaW5jbHVkZWQKKyAgICAvLyBp
biB0aGUgRE1BQnVmT2JqZWN0LCBhbmQgdGhlIHJlbGV2YW50IG1hdHJpeCBkZWNpZGVkIGJhc2Vk
IG9uIGl0LiBCVC42MDEgc2hvdWxkIHJlbWFpbiB0aGUgZGVmYXVsdC4KKyAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8R0xmbG9hdCwgOT4gc195dXZUb1JHQiB7CisgICAgICAgIDEuMTY0
ZiwgIDAuMGYsICAgIDEuNTk2ZiwKKyAgICAgICAgMS4xNjRmLCAtMC4zOTFmLCAtMC44MTNmLAor
ICAgICAgICAxLjE2NGYsICAyLjAxOGYsICAwLjBmCisgICAgfTsKKworICAgIFRleHR1cmVNYXBw
ZXJHTCYgdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFw
cGVyKTsKKyAgICBhdXRvJiBkYXRhID0gKm1faW1hZ2VEYXRhOworCisgICAgc3dpdGNoIChtX29i
amVjdC5mb3JtYXQuZm91cmNjKSB7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJH
Qjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg6CisgICAgY2Fz
ZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6QUJHUjg4ODg6CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlKGRhdGEudGV4
dHVyZVswXSwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdl
dFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Okk0MjA6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6WTQ0NDoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDFCOgorICAgIGNh
c2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MkI6CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0
dXJlUGxhbmFyWVVWKHN0ZDo6YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4dHVyZVswXSwgZGF0
YS50ZXh0dXJlWzFdLCBkYXRhLnRleHR1cmVbMl0gfSwKKyAgICAgICAgICAgIHNfeXV2VG9SR0Is
IG1fZmxhZ3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBt
b2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWMTI6CisgICAgICAgIHRleG1hcEdMLmRy
YXdUZXh0dXJlUGxhbmFyWVVWKHN0ZDo6YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4dHVyZVsw
XSwgZGF0YS50ZXh0dXJlWzJdLCBkYXRhLnRleHR1cmVbMV0gfSwKKyAgICAgICAgICAgIHNfeXV2
VG9SR0IsIG1fZmxhZ3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkE0MjA6CisgICAgICAgIHRleG1h
cEdMLmRyYXdUZXh0dXJlUGxhbmFyWVVWKHN0ZDo6YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4
dHVyZVswXSwgZGF0YS50ZXh0dXJlWzFdLCBkYXRhLnRleHR1cmVbMl0gfSwKKyAgICAgICAgICAg
IHNfeXV2VG9SR0IsIG1fZmxhZ3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0
YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIGRhdGEudGV4dHVyZVszXSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMTI6CisgICAg
Y2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMToKKyAgICAgICAgdGV4bWFwR0wuZHJhd1Rl
eHR1cmVTZW1pUGxhbmFyWVVWKHN0ZDo6YXJyYXk8R0x1aW50LCAyPiB7IGRhdGEudGV4dHVyZVsw
XSwgZGF0YS50ZXh0dXJlWzFdIH0sCisgICAgICAgICAgICAobV9vYmplY3QuZm9ybWF0LmZvdXJj
YyA9PSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6TlYyMSksCisgICAgICAgICAgICBzX3l1dlRvUkdC
LCBtX2ZsYWdzLCBJbnRTaXplKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6WVVZMjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpV
WVZZOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE6CisgICAgY2FzZSBETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6WVZZVToKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmVQYWNr
ZWRZVVYoZGF0YS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgc195dXZUb1JHQiwgbV9mbGFncywg
SW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgb3BhY2l0eSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpFR0xJbWFnZURhdGE+IFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEo
RE1BQnVmT2JqZWN0JiBvYmplY3QpCit7CisgICAgdXNpbmcgRUdMSW1hZ2VEYXRhID0gVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdlRGF0
YTsKKworICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCkuZWdsRGlzcGxheSgpOworCisgICAgRUdMSW1hZ2VLSFIg
aW1hZ2VbRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lc107CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG9iamVjdC5mb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgc3RkOjppbml0
aWFsaXplcl9saXN0PEVHTGludD4gYXR0cmlidXRlcyB7CisgICAgICAgICAgICBFR0xfV0lEVEgs
IEVHTGludChvYmplY3QuZm9ybWF0LnBsYW5lV2lkdGgoaSwgb2JqZWN0LndpZHRoKSksCisgICAg
ICAgICAgICBFR0xfSEVJR0hULCBFR0xpbnQob2JqZWN0LmZvcm1hdC5wbGFuZUhlaWdodChpLCBv
YmplY3QuaGVpZ2h0KSksCisgICAgICAgICAgICBFR0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQsIEVH
TGludChvYmplY3QuZm9ybWF0LnBsYW5lc1tpXS5mb3VyY2MpLAorICAgICAgICAgICAgRUdMX0RN
QV9CVUZfUExBTkUwX0ZEX0VYVCwgb2JqZWN0LmZkW2ldLAorICAgICAgICAgICAgRUdMX0RNQV9C
VUZfUExBTkUwX09GRlNFVF9FWFQsIEVHTGludChvYmplY3Qub2Zmc2V0W2ldKSwKKyAgICAgICAg
ICAgIEVHTF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQsIEVHTGludChvYmplY3Quc3RyaWRlW2ld
KSwKKyAgICAgICAgICAgIEVHTF9OT05FLAorICAgICAgICB9OworICAgICAgICBpbWFnZVtpXSA9
IGNyZWF0ZUltYWdlS0hSKCkoZWdsRGlzcGxheSwgRUdMX05PX0NPTlRFWFQsIEVHTF9MSU5VWF9E
TUFfQlVGX0VYVCwgbnVsbHB0ciwgc3RkOjpkYXRhKGF0dHJpYnV0ZXMpKTsKKyAgICB9CisKKyAg
ICBhdXRvIGltYWdlRGF0YSA9IG1ha2VVbmlxdWU8RUdMSW1hZ2VEYXRhPigpOworICAgIGF1dG8m
IGRhdGEgPSAqaW1hZ2VEYXRhOworICAgIGRhdGEud2lkdGggPSBvYmplY3Qud2lkdGg7CisgICAg
ZGF0YS5oZWlnaHQgPSBvYmplY3QuaGVpZ2h0OworICAgIGRhdGEubnVtSW1hZ2VzID0gb2JqZWN0
LmZvcm1hdC5udW1QbGFuZXM7CisgICAgZ2xHZW5UZXh0dXJlcyhkYXRhLm51bUltYWdlcywgZGF0
YS50ZXh0dXJlLmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubnVt
SW1hZ2VzOyArK2kpIHsKKyAgICAgICAgZGF0YS5pbWFnZVtpXSA9IGltYWdlW2ldOworCisgICAg
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgZGF0YS50ZXh0dXJlW2ldKTsKKyAgICAg
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyhHTF9U
RVhUVVJFXzJELCBkYXRhLmltYWdlW2ldKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wOGMwYmRhY2E2ZDJkYmUxMDk1MWVjZTgzZGU3NjVjMGE3MzJhOWYwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaApAQCAtMCwwICsxLDExMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJETUFCdWZGb3JtYXQuaCIKKyNpbmNsdWRlICJETUFCdWZPYmpl
Y3QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDxjc3RkaW50Pgor
I2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmIGZpbmFsIDogcHVibGljIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmKCk7CisKKyAgICBi
b29sIGlzRE1BQnVmQmFzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFjdGl2YXRlT25Db21wb3NpdGluZ1RocmVhZChDb21wb3Np
dG9yKiwgVGV4dHVyZU1hcHBlckxheWVyKikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBpbnZhbGlkYXRlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2Fw
QnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBjbGFzcyBETUFCdWZMYXllciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxETUFCdWZMYXllcj4sIHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoK
KyAgICAgICAgRE1BQnVmTGF5ZXIoRE1BQnVmT2JqZWN0JiYsIFRleHR1cmVNYXBwZXJHTDo6Rmxh
Z3MgPSAwKTsKKyAgICAgICAgdmlydHVhbCB+RE1BQnVmTGF5ZXIoKTsKKworICAgICAgICB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0geyB9LCBmbG9hdCBv
cGFjaXR5ID0gMS4wKSBmaW5hbDsKKworICAgICAgICB2b2lkIHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX29iamVjdC5yZWxlYXNlRmxhZy5yZWxlYXNlKCk7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmOworCisgICAgICAgIHN0cnVjdCBFR0xJbWFnZURhdGE7CisgICAg
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RUdMSW1hZ2VEYXRhPiBjcmVhdGVFR0xJbWFnZURh
dGEoRE1BQnVmT2JqZWN0Jik7CisKKyAgICAgICAgRE1BQnVmT2JqZWN0IG1fb2JqZWN0OworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RUdMSW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKKyAgICAgICAg
VGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY19tYXhpbXVtQWdlIHsgMTYgfTsKKyAgICAgICAgdW5zaWduZWQgbV9hZ2Ug
eyAwIH07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgICAgdm9pZCBwdXNo
RE1BQnVmKERNQUJ1Zk9iamVjdCYmIGRtYWJ1Zk9iamVjdCwgY29uc3QgRiYgY29uc3RydWN0b3Is
IFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2xheWVycy5lbnN1
cmUoZG1hYnVmT2JqZWN0LmhhbmRsZSwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE1BQnVmTGF5ZXIoY29uc3RydWN0b3IoV1RGTW92ZShk
bWFidWZPYmplY3QpKSwgZmxhZ3MpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBwdXNoRE1B
QnVmKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29weVJlZigpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBwdXNoRE1BQnVmKFJlZjxETUFCdWZMYXllcj4mJik7CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgUmVmUHRyPFRocmVhZD4gbV9jb21wb3NpdG9yVGhyZWFkOworI2VuZGlmCisKKyAg
ICB1c2luZyBMYXllck1hcCA9IEhhc2hNYXA8dWludHB0cl90LCBSZWY8RE1BQnVmTGF5ZXI+LCBX
VEY6OkRlZmF1bHRIYXNoPHVpbnRwdHJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dWludHB0cl90Pj47CisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisKKyAgICBSZWZQdHI8
RE1BQnVmTGF5ZXI+IG1fcGVuZGluZ0xheWVyOworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9j
b21taXR0ZWRMYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19URVhUVVJFTUFQUEVSX1BMQVRGT1JNTEFZRVJQUk9YWShUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLCBpc0RNQUJ1ZkJhc2VkKCkpOworCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454821</attachid>
            <date>2022-03-16 04:06:50 -0700</date>
            <delta_ts>2022-03-16 06:13:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237328-20220316120648.patch</filename>
            <type>text/plain</type>
            <size>80414</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQxMmYwM2Q0M2ZmYWNk
ZDJjMDZlMTI3OWFiNzUxNDU4NDYwZDdiMC4uZmViMDQ5ZGI5ZTdlNDA5OGQ3NDc3NDAzMzBjODc5
ZmE0ZDI1ZjQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAyMi0wMy0xNiAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBQ
cm92aWRlIERNQUJ1Zi1iYXNlZCBjb21wb3NpdGlvbiBsYXllcnMsIERNQUJ1ZlZpZGVvU2luayBp
bnRlZ3JhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3MzI4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85MDI5NTQ5Mj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiwgYSBUZXh0dXJlTWFwcGVyIHByb3h5CisgICAg
ICAgIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwbGF0Zm9ybSBsYXllcnMgYmFja2VkIGJ5
IGRtYWJ1ZiBvYmplY3RzLgorICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZGlz
cGxheSBvZiBkbWFidWYgcHJvZHVjZXJzIGxpa2UgR1N0cmVhbWVyCisgICAgICAgIHBpcGVsaW5l
cyBvciBBTkdMRS1iYWNrZWQgV2ViR0wgY29udGV4dHMuIFRoZSBETUFCdWZMYXllciBjbGFzcyBp
cyB0aGUKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgb2JqZWN0LCBoYW5kbGluZyBkaXNwbGF5IG9m
IHRoZSBhY3R1YWwgZG1hYnVmLiBUaGUgcHJveHkKKyAgICAgICAgaXRzZWxmIGlzIHRhc2tlZCB3
aXRoIGNyZWF0aW5nIGFuZCBjYWNoaW5nIHN1Y2ggbGF5ZXJzIGZvciBhbnkgZG1hYnVmCisgICAg
ICAgIG9iamVjdCB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgcHJvZHVjZXIuCisKKyAgICAgICAg
Rm9yIGVhY2ggZG1hYnVmIG9iamVjdCBwdXNoZWQgaW50byB0aGUgcHJveHksIHRoZSBhY2NvcmRp
bmcgRE1BQnVmTGF5ZXIKKyAgICAgICAgb2JqZWN0IGlzIHNwYXduZWQgYW5kIGNhY2hlZCBmb3Ig
ZnV0dXJlIHJldXNlLCBleHBlY3RpbmcgdGhlIHByb2R1Y2VyCisgICAgICAgIHRvIGJlIGFibGUg
dG8gcHJvdmlkZSBkbWFidWZzIGZyb20gYSBwb29sIG9yIHN3YXBjaGFpbiBvZiB0aGVzZSBvYmpl
Y3RzLgorICAgICAgICBUaGUgY2FjaGUgaXMgZW1wdGllZCB3aGVuZXZlciBkbWFidWZzIGdvIHVu
dXNlZCBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZgorICAgICAgICBzd2Fwcywgb3IgaWYgdGhlIHNp
emUgb2YgdGhlIHByb3ZpZGVkIGRtYWJ1ZnMgY2hhbmdlcy4KKworICAgICAgICBETUFCdWZGb3Jt
YXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGRpZmZlcmVudCBEUk0gZm9ybWF0cywgZm9yCisg
ICAgICAgIGluc3RhbmNlIGhvdyBkaWZmZXJlbnQgcGxhbmVzIGZvciBzcGVjaWZpYyBmb3JtYXRz
IGFyZSBmb3JtYXR0ZWQgYW5kCisgICAgICAgIHNpemVkLgorCisgICAgICAgIERNQUJ1Zk9iamVj
dCBpcyBhIGNsYXNzIHRoYXQgaGFuZGxlcyBhIGdpdmVuIGdyb3VwaW5nIG9mIGRtYWJ1ZnMKKyAg
ICAgICAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LiBJdCBoYXMgYW4gYXNzb2Np
YXRlZCBoYW5kbGUgdmFsdWUsCisgICAgICAgIHNpemUsIGFuZCBwZXItcGxhbmUgZG1hYnVmIGZp
bGUgZGVzY3JpcHRvcnMsIG9mZnNldHMsIHN0cmlkZXMgYW5kCisgICAgICAgIG1vZGlmaWVycywg
YWxvbmcgd2l0aCBhIERNQUJ1ZlJlbGVhc2VGbGFnIGluc3RhbmNlLgorCisgICAgICAgIERNQUJ1
ZlJlbGVhc2VGbGFnIG9iamVjdHMgYXJlIHVzZWQgYXMgYW4gZXZlbnRmZC1iYXNlZCByZWxlYXNl
IG1lY2hhbmlzbQorICAgICAgICB0aGF0IGluZGljYXRlcyB0byB0aGUgcHJvZHVjZXIgdGhhdCB0
aGUgZ2l2ZW4gRE1BQnVmT2JqZWN0IGhhcyBiZWVuCisgICAgICAgIHByZXNlbnRlZCBhbmQgc3Vi
c2VxdWVudGx5IHJlbGVhc2VkIGFuZCBpcyB0aHVzIGF2YWlsYWJsZSBmb3IgcmV1c2UuCisKKyAg
ICAgICAgR0JNQnVmZmVyU3dhcGNoYWluIHByb3ZpZGVzIGEgY3VzdG9tIHN3YXBjaGFpbiBpbXBs
ZW1lbnRhdGlvbiB0aGF0J3MKKyAgICAgICAgYmFzZWQgb24gbGliZ2JtIGZ1bmN0aW9uYWxpdHku
IEVhY2ggc3VjaCBzd2FwY2hhaW4gaGFzIGEgY2FwYWNpdHkKKyAgICAgICAgc3BlY2lmaWVkIGR1
cmluZyBjb25zdHJ1Y3Rpb24sIHdpdGggdGhlIGNhcGFjaXRpZXMgb2YgZm91ciBvciBlaWdodAor
ICAgICAgICBjdXJyZW50bHkgc3VwcG9ydGVkLiBnZXRCdWZmZXIoKSBpcyBjYWxsZWQgYnkgdGhl
IHByb2R1Y2VyIHRvIG9idGFpbiBhCisgICAgICAgIGJ1ZmZlciBvYmplY3QgdGhhdCdzIHRoZW4g
dXNlZCBmb3IgYmFja2luZyBvZiBzcGVjaWZpYyBjb250ZW50IGxpa2UKKyAgICAgICAgQU5HTEUg
ZXhlY3V0aW9uIG9yIG1lZGlhJ3Mgc29mdHdhcmUtZGVjb2RlZCB2aWRlbyBmcmFtZXMuIEJ1ZmZl
cnMKKyAgICAgICAgb2J0YWluZWQgdGhpcyB3YXkgYXJlIG1vdmVkIG92ZXIgdG8gdGhlIGVuZCBv
ZiB0aGUgYnVmZmVyIGFycmF5LCB3aXRoCisgICAgICAgIHRoZSBleHBlY3RhdGlvbiBvZiByZXVz
aW5nIHRoZW0gb25jZSB0aGV5IGFyZSByZWxlYXNlZCBieSB0aGUKKyAgICAgICAgY29tcG9zaXRp
b24gZW5naW5lLgorCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBpbXBsZW1l
bnRhdGlvbiBpcyBlbmhhbmNlZCB0byB1c2UgdGhlCisgICAgICAgIHJlY2VudGx5LWFkZGVkIFdl
YktpdERNQUJ1ZlZpZGVvU2luayBlbGVtZW50IGlmIGl0cyB1c2UgaXMgZW5hYmxlZAorICAgICAg
ICB0aHJvdWdoIHRoZSBkZXZlbG9wbWVudC1wdXJwb3NlIGVudmlyb25tZW50IHZhcmlhYmxlIGFu
ZCBpZiB0aGUKKyAgICAgICAgbmVjZXNzYXJ5IEdTdHJlYW1lciBmYWNpbGl0aWVzIGFyZSBwcmVz
ZW50IG9uIHRoZSBzeXN0ZW0uIFdoZW4gdGhlc2UKKyAgICAgICAgY29uZGl0aW9ucyBhcmUgbWV0
LCB0aGUgTmljb3NpYTo6Q29udGVudExheWVyIGluc3RhbmNlIGlzIGFsc28KKyAgICAgICAgY29u
c3RydWN0ZWQgd2l0aCBhIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgaW5z
dGFuY2UsIHNpbmNlCisgICAgICAgIHdlIGV4cGVjdCB0byBwcmVzZW50IHRoZSBkbWFidWZzIHRo
cm91Z2ggdGhhdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIFdpdGggdGhlIFdlYktpdERNQUJ1
ZlZpZGVvU2luaywgdGhlIGluY29taW5nIHNhbXBsZXMgYXJlIGVpdGhlciBiYXNlZAorICAgICAg
ICBvbiBkbWFidWZzIChpbiBjYXNlIG9mIGRtYWJ1Zi1jYXBhYmxlIGhhcmR3YXJlIGRlY29kZXIp
IG9yIGFyZSBqdXN0IHJhdworICAgICAgICBkYXRhIChtb3N0IGxpa2VseSBjb21pbmcgZnJvbSBh
IHNvZnR3YXJlLWJhc2VkIGRlY29kZXIpLiBJbiBjYXNlIG9mCisgICAgICAgIGRtYWJ1ZnMgd2Ug
Y2FuIHVzZSB0aGUgR3N0TWVtb3J5IHBvaW50ZXIgYXMgdGhlIGhhbmRsZSB0aHJvdWdoIHdoaWNo
CisgICAgICAgIHRoZSByZWxldmFudCBkYXRhIGlzIGNhY2hlZCBpbiBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5RE1BQnVmLAorICAgICAgICBhbmQgdXBvbiB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSB3ZSByZXRyaWV2ZSBhbGwgdGhlIHJlbGV2YW50IGRtYWJ1ZiBkYXRhCisgICAgICAgIHNv
IHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgdGhhdCBwcm94eSBpbXBsZW1lbnRhdGlvbiB0byBjb25z
dHJ1Y3QgYQorICAgICAgICByZW5kZXJhYmxlIEVHTEltYWdlLgorCisgICAgICAgIEluIGNhc2Ug
b2Ygc29mdHdhcmUtZGVjb2RlZCByYXcgZGF0YSwgd2UgaGF2ZSB0byB1c2UgdGhlIHN3YXBjaGFp
bgorICAgICAgICBvYmplY3QgYW5kIGNvcHkgdGhlIGRhdGEgb24gYSBwZXItcGxhbmUgYmFzaXMg
Zm9yIGVhY2ggc3VjaCBzYW1wbGUsCisgICAgICAgIGZpbmFsbHkgcHVzaGluZyB0aGUgZG1hYnVm
IGRhdGEgb2YgdGhhdCBzd2FwY2hhaW4gYnVmZmVyIGludG8gdGhlCisgICAgICAgIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYgaW5zdGFuY2UuCisKKyAgICAgICAgQ2hhbmdl
cyBhcm91bmQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1ZiBhbmQgR1N0cmVh
bWVyCisgICAgICAgIGludGVncmF0aW9uIGFyZSBndWFyZGVkIHdpdGggVVNFKFRFWFRVUkVfTUFQ
UEVSX0RNQUJVRikuIE5vIHBvcnQgeWV0CisgICAgICAgIGVuYWJsZXMgdGhpcyBidWlsZCBndWFy
ZCwgYnV0IHRoaXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLiBTaW1pbGFybHksCisgICAgICAgIHRo
ZSBjb2RlIHNwZWNpZmljIHRvIGxpYmdibSB3aWxsIGFsc28gYmUgZ3VhcmRlZCBpbiBhIHNlcGFy
YXRlIHNldCBvZgorICAgICAgICBjaGFuZ2VzLgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6
CisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmRm9ybWF0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91
ckNDKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdDo6cGxhbmVXaWR0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpETUFCdWZGb3JtYXQ6OnBsYW5lSGVpZ2h0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRNQUJ1ZkZvcm1hdDo6UGxhbmU6OlBsYW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQSk6CisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZGb3JtYXRJbXBsOjpkZWZpbmVQbGFuZSk6CisgICAgICAgIChXZWJD
b3JlOjpETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1
ZkZvcm1hdDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVm
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmT2JqZWN0OjpETUFCdWZP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RE1BQnVmT2JqZWN0Ojp+RE1BQnVmT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRNQUJ1Zk9iamVjdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nYm0vRE1BQnVmUmVsZWFzZUZsYWcuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpETUFCdWZSZWxlYXNlRmxhZzo6RE1BQnVmUmVsZWFzZUZsYWcpOgorICAgICAg
ICAoV2ViQ29yZTo6RE1BQnVmUmVsZWFzZUZsYWc6On5ETUFCdWZSZWxlYXNlRmxhZyk6CisgICAg
ICAgIChXZWJDb3JlOjpETUFCdWZSZWxlYXNlRmxhZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdl
YkNvcmU6OkRNQUJ1ZlJlbGVhc2VGbGFnOjpkdXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RE1BQnVmUmVsZWFzZUZsYWc6OnJlbGVhc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRN
QUJ1ZlJlbGVhc2VGbGFnOjpyZWxlYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
Ym0vR0JNQnVmZmVyU3dhcGNoYWluLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHQk1C
dWZmZXJTd2FwY2hhaW46OkdCTUJ1ZmZlclN3YXBjaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpH
Qk1CdWZmZXJTd2FwY2hhaW46OmdldEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZm
ZXJTd2FwY2hhaW46OkJ1ZmZlcjo6QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZl
clN3YXBjaGFpbjo6QnVmZmVyOjpjcmVhdGVETUFCdWZPYmplY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OlBsYW5lRGF0YTo6flBsYW5lRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyOjpo
YW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZm
ZXI6Om51bVBsYW5lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHQk1CdWZmZXJTd2FwY2hh
aW46OkJ1ZmZlcjo6cGxhbmVEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktp
dERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCk6CisgICAgICAgICh3ZWJLaXRETUFCdWZWaWRlb1Np
bmtTZXRNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpmb3VyY2NWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hE
TUFCdWZUb0NvbXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0RNQUJ1Zik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHA6CisgICAgICAgIChOaWNvc2lhOjpD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUltYWdlS0hSKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lJbWFnZUtI
Uik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhOjp+RUdMSW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmFjdGl2YXRl
T25Db21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5RE1BQnVmOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OnN3YXBCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6cHVzaERN
QUJ1Zik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
RE1BQnVmOjpETUFCdWZMYXllcjo6RE1BQnVmTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5RE1BQnVmLmg6IEFkZGVkLgorCiAyMDIyLTAzLTE1ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjgyNzM3KTogYHRleHQtc2hhZG93YCBp
cyBjbGlwcGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDRlMzAzMzVjZmFkOWVkNzliMDU3Mzcz
MWY1MjQxMmNiYjlkMjZiMzYuLmI1ZTU4Y2NkNzYxOWU0N2M3N2NiN2IyYzZkN2JhNTgxY2FiMDI1
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC0xMDEsNiArMTAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFw
aGljcy9lZ2wvR0xDb250ZXh0RUdMV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFw
aGljcy9lZ2wvR0xDb250ZXh0RUdMWDExLmNwcCBAbm8tdW5pZnkKIAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1E
ZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIEBuby11
bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRleCA1N2ZhN2NhNjdjNGRlYTRhOWU1Yjk4NDVlNzJh
ZTI1ODczZDhjZjU1Li5mOGM4YzcwNDkyZmIwOWQxMDlhZWQxMTg0YjdjNjljYTI1ZWIyZjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtODksNiArODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybURpc3BsYXkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTExpYldQRS5jcHAKIAorcGxhdGZv
cm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2dibS9HQk1EZXZpY2UuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURp
c3BsYXlMaWJXUEUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5j
bWFrZQppbmRleCA0ZTBhZWJlMTk3NDc3ODhkNjQwZGM5OTVhNjZjNDNiYmEyYzkxODE2Li45NTUz
YmJkYThlN2Q4ZDRkNmY4YmU2OGZhMDAzZTgwZTkzNTk2Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTUxLDYgKzUxLDE2IEBAIGlmIChVU0Vf
VEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgKQogZW5kaWYgKCkKIAoraWYgKFVTRV9URVhUVVJFX01B
UFBFUl9ETUFCVUYpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmLmNwcAorICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUworICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oCisgICAgKQorZW5kaWYgKCkKKwogaWYgKFVTRV9D
T09SRElOQVRFRF9HUkFQSElDUykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9zY3JvbGxpbmcv
bmljb3NpYSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2di
bS9ETUFCdWZGb3JtYXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9E
TUFCdWZGb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2Q3MjVhOTcwMTUzYzRmZjc4YTdiYjQ4ZTA3Yjhj
MGU3ZjdjNDMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2JtL0RNQUJ1ZkZvcm1hdC5oCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxjc3Rk
ZGVmPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIERNQUJ1ZkZvcm1hdEltcGwgeworCitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGNyZWF0
ZUZvdXJDQyhjaGFyIGEsIGNoYXIgYiwgY2hhciBjLCBjaGFyIGQpCit7CisgICAgcmV0dXJuIHVp
bnQzMl90KGEpIHwgKHVpbnQzMl90KGIpIDw8IDgpIHwgKHVpbnQzMl90KGMpIDw8IDE2KSB8ICh1
aW50MzJfdChkKSA8PCAyNCk7Cit9CisKK30KKworc3RydWN0IERNQUJ1ZkZvcm1hdCB7CisgICAg
ZW51bSBjbGFzcyBGb3VyQ0MgOiB1aW50MzJfdCB7CisgICAgICAgIEludmFsaWQgPSAwLAorCisg
ICAgICAgIFI4ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdSJywgJzgnLCAnICcs
ICcgJyksCisgICAgICAgIEdSODggPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0cn
LCAnUicsICc4JywgJzgnKSwKKworICAgICAgICBYUkdCODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6
OmNyZWF0ZUZvdXJDQygnWCcsICdSJywgJzInLCAnNCcpLAorICAgICAgICBYQkdSODg4OCA9IERN
QUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWCcsICdCJywgJzInLCAnNCcpLAorICAgICAg
ICBSR0JYODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICdYJywgJzIn
LCAnNCcpLAorICAgICAgICBCR1JYODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJD
QygnQicsICdYJywgJzInLCAnNCcpLAorICAgICAgICBBUkdCODg4OCA9IERNQUJ1ZkZvcm1hdElt
cGw6OmNyZWF0ZUZvdXJDQygnQScsICdSJywgJzInLCAnNCcpLAorICAgICAgICBBQkdSODg4OCA9
IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnQScsICdCJywgJzInLCAnNCcpLAorICAg
ICAgICBSR0JBODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnUicsICdBJywg
JzInLCAnNCcpLAorICAgICAgICBCR1JBODg4OCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZv
dXJDQygnQicsICdBJywgJzInLCAnNCcpLAorICAgICAgICBSR0I4ODggPSBETUFCdWZGb3JtYXRJ
bXBsOjpjcmVhdGVGb3VyQ0MoJ1InLCAnRycsICcyJywgJzQnKSwKKyAgICAgICAgQkdSODg4ID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdCJywgJ0cnLCAnMicsICc0JyksCisKKyAg
ICAgICAgSTQyMCA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnSScsICc0JywgJzIn
LCAnMCcpLAorICAgICAgICBZVjEyID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJ1YnLCAnMScsICcyJyksCisgICAgICAgIEE0MjAgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ0EnLCAnNCcsICcyJywgJzAnKSwKKyAgICAgICAgTlYxMiA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnTicsICdWJywgJzEnLCAnMicpLAorICAgICAgICBOVjIxID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdOJywgJ1YnLCAnMicsICcxJyksCisKKyAg
ICAgICAgWVVZMiA9IERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICdVJywgJ1kn
LCAnMicpLAorICAgICAgICBZVllVID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJ1YnLCAnWScsICdVJyksCisgICAgICAgIFVZVlkgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1UnLCAnWScsICdWJywgJ1knKSwKKyAgICAgICAgVllVWSA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnVicsICdZJywgJ1UnLCAnWScpLAorICAgICAgICBWVVlBID0g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdWJywgJ1UnLCAnWScsICdBJyksCisgICAg
ICAgIEFZVVYgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVGb3VyQ0MoJ0EnLCAnWScsICdVJywg
J1YnKSwKKworICAgICAgICBZNDQ0ID0gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlRm91ckNDKCdZ
JywgJzQnLCAnNCcsICc0JyksCisgICAgICAgIFk0MUIgPSBETUFCdWZGb3JtYXRJbXBsOjpjcmVh
dGVGb3VyQ0MoJ1knLCAnNCcsICcxJywgJ0InKSwKKyAgICAgICAgWTQyQiA9IERNQUJ1ZkZvcm1h
dEltcGw6OmNyZWF0ZUZvdXJDQygnWScsICc0JywgJzInLCAnQicpLAorICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNfbWF4UGxhbmVzID0gNDsKKworICAgIHRlbXBsYXRl
PEZvdXJDQz4gc3RhdGljIERNQUJ1ZkZvcm1hdCBjcmVhdGUoKSA9IGRlbGV0ZTsKKyAgICBzdGF0
aWMgRE1BQnVmRm9ybWF0IGNyZWF0ZSh1aW50MzJfdCk7CisKKyAgICB0ZW1wbGF0ZTxGb3VyQ0Mg
Zm91cmNjVmFsdWUsIHR5cGVuYW1lLi4uIFBsYW5lRGVmaW5pdGlvblR5cGVzPgorICAgIHN0YXRp
YyBETUFCdWZGb3JtYXQgaW5zdGFudGlhdGUoKTsKKworICAgIEZvdXJDQyBmb3VyY2MgeyBGb3Vy
Q0M6OkludmFsaWQgfTsKKyAgICB1bnNpZ25lZCBudW1QbGFuZXMgeyAwIH07CisKKyAgICB1aW50
MzJfdCBwbGFuZVdpZHRoKHVuc2lnbmVkIHBsYW5lSW5kZXgsIHVpbnQzMl90IHdpZHRoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKHBsYW5lSW5kZXggPCBjX21heFBsYW5lcyk7CisgICAg
ICAgIHJldHVybiAod2lkdGggPj4gcGxhbmVzW3BsYW5lSW5kZXhdLmhvcml6b250YWxTdWJzYW1w
bGluZyk7CisgICAgfQorCisgICAgdWludDMyX3QgcGxhbmVIZWlnaHQodW5zaWduZWQgcGxhbmVJ
bmRleCwgdWludDMyX3QgaGVpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHBsYW5l
SW5kZXggPCBjX21heFBsYW5lcyk7CisgICAgICAgIHJldHVybiAoaGVpZ2h0ID4+IHBsYW5lc1tw
bGFuZUluZGV4XS52ZXJ0aWNhbFN1YnNhbXBsaW5nKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxG
b3VyQ0MgZm91cmNjVmFsdWUsIHVuc2lnbmVkIGhzVmFsdWUsIHVuc2lnbmVkIHZzVmFsdWU+Cisg
ICAgc3RydWN0IFBsYW5lRGVmaW5pdGlvbiB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgRm91
ckNDIGZvdXJjYyA9IGZvdXJjY1ZhbHVlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGhvcml6b250YWxTdWJzYW1wbGluZyA9IGhzVmFsdWU7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgdmVydGljYWxTdWJzYW1wbGluZyA9IHZzVmFsdWU7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBQbGFuZSB7CisgICAgICAgIFBsYW5lKCkgPSBkZWZhdWx0OworCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFBsYW5lRGVmaXRpb25UeXBlPgorICAgICAgICBQbGFuZShjb25z
dCBQbGFuZURlZml0aW9uVHlwZSYpCisgICAgICAgICAgICA6IGZvdXJjYyhQbGFuZURlZml0aW9u
VHlwZTo6Zm91cmNjKQorICAgICAgICAgICAgLCBob3Jpem9udGFsU3Vic2FtcGxpbmcoUGxhbmVE
ZWZpdGlvblR5cGU6Omhvcml6b250YWxTdWJzYW1wbGluZykKKyAgICAgICAgICAgICwgdmVydGlj
YWxTdWJzYW1wbGluZyhQbGFuZURlZml0aW9uVHlwZTo6dmVydGljYWxTdWJzYW1wbGluZykKKyAg
ICAgICAgeyB9CisKKyAgICAgICAgRm91ckNDIGZvdXJjYyB7IEZvdXJDQzo6SW52YWxpZCB9Owor
ICAgICAgICB1bnNpZ25lZCBob3Jpem9udGFsU3Vic2FtcGxpbmcgeyAwIH07CisgICAgICAgIHVu
c2lnbmVkIHZlcnRpY2FsU3Vic2FtcGxpbmcgeyAwIH07CisgICAgfTsKKyAgICBzdGQ6OmFycmF5
PFBsYW5lLCBjX21heFBsYW5lcz4gcGxhbmVzOworfTsKKworbmFtZXNwYWNlIERNQUJ1ZkZvcm1h
dEltcGwgeworCit0ZW1wbGF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQyBmb3VyY2NWYWx1ZT4KK2lu
bGluZSBETUFCdWZGb3JtYXQgY3JlYXRlU2luZ2xlUGxhbmVSR0JBKCkKK3sKKyAgICByZXR1cm4g
RE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxmb3VyY2NWYWx1ZSwKKyAgICAgICAgRE1BQnVmRm9y
bWF0OjpQbGFuZURlZmluaXRpb248Zm91cmNjVmFsdWUsIDAsIDA+PigpOworfQorCit0ZW1wbGF0
ZTxzaXplX3QgSW5kZXgsIHNpemVfdCBTaXplLCB0eXBlbmFtZSBQbGFuZURlZmluaXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KK3ZvaWQgZGVmaW5lUGxhbmUoc3Rk
OjphcnJheTxETUFCdWZGb3JtYXQ6OlBsYW5lLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiYg
cGxhbmVzKQoreworICAgIG5ldyAoJnBsYW5lc1tJbmRleF0pIERNQUJ1ZkZvcm1hdDo6UGxhbmUo
UGxhbmVEZWZpbml0aW9uVHlwZSB7IH0pOworICAgIGlmIGNvbnN0ZXhwciAoKEluZGV4ICsgMSkg
PCBTaXplKQorICAgICAgICBkZWZpbmVQbGFuZTxJbmRleCArIDEsIFNpemUsIFBsYW5lRGVmaW5p
dGlvblR5cGVzLi4uPihwbGFuZXMpOworfQorCit9CisKK3RlbXBsYXRlPERNQUJ1ZkZvcm1hdDo6
Rm91ckNDIGZvdXJjY1ZhbHVlLCB0eXBlbmFtZS4uLiBQbGFuZURlZmluaXRpb25UeXBlcz4KK2lu
bGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZSgpCit7CisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YuLi4oUGxhbmVEZWZpbml0aW9uVHlwZXMpIDw9IDQpOworCisgICAg
RE1BQnVmRm9ybWF0IGZvcm1hdDsKKyAgICBmb3JtYXQuZm91cmNjID0gZm91cmNjVmFsdWU7Cisg
ICAgZm9ybWF0Lm51bVBsYW5lcyA9IHNpemVvZi4uLihQbGFuZURlZmluaXRpb25UeXBlcyk7Cisg
ICAgRE1BQnVmRm9ybWF0SW1wbDo6ZGVmaW5lUGxhbmU8MCwgc2l6ZW9mLi4uKFBsYW5lRGVmaW5p
dGlvblR5cGVzKSwgUGxhbmVEZWZpbml0aW9uVHlwZXMuLi4+KGZvcm1hdC5wbGFuZXMpOworICAg
IHJldHVybiBmb3JtYXQ7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1B
QnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4PigpCit7Cisg
ICAgcmV0dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6
OlhSR0I4ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1
ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdSODg4OD4oKQoreworICAg
IHJldHVybiBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpY
QkdSODg4OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZG
b3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6UkdCWDg4ODg+KCkKK3sKKyAgICBy
ZXR1cm4gRE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6UkdC
WDg4ODg+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9y
bWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkJHUlg4ODg4PigpCit7CisgICAgcmV0
dXJuIERNQUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OkJHUlg4
ODg4PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1h
dDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4OD4oKQoreworICAgIHJldHVy
biBETUFCdWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpBUkdCODg4
OD4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6
OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QUJHUjg4ODg+KCkKK3sKKyAgICByZXR1cm4g
RE1BQnVmRm9ybWF0SW1wbDo6Y3JlYXRlU2luZ2xlUGxhbmVSR0JBPEZvdXJDQzo6QUJHUjg4ODg+
KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0Ojpj
cmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQkE4ODg4PigpCit7CisgICAgcmV0dXJuIERN
QUJ1ZkZvcm1hdEltcGw6OmNyZWF0ZVNpbmdsZVBsYW5lUkdCQTxGb3VyQ0M6OlJHQkE4ODg4Pigp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3Jl
YXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JBODg4OD4oKQoreworICAgIHJldHVybiBETUFC
dWZGb3JtYXRJbXBsOjpjcmVhdGVTaW5nbGVQbGFuZVJHQkE8Rm91ckNDOjpCR1JBODg4OD4oKTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0
ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6STQyMD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3Jt
YXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6STQyMCwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZv
dXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwg
MT4sCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAxPj4oKTsKK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFC
dWZGb3JtYXQ6OkZvdXJDQzo6WVYxMj4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omlu
c3RhbnRpYXRlPEZvdXJDQzo6WVYxMiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6
UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisg
ICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAxPj4oKTsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3Jt
YXQ6OkZvdXJDQzo6QTQyMD4oKQoreworICAgIHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRp
YXRlPEZvdXJDQzo6QTQyMCwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDAs
IDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMT4sCisgICAgICAg
IFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAxLCAxPiwKKyAgICAgICAgUGxhbmVEZWZpbml0
aW9uPEZvdXJDQzo6UjgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVm
Rm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjEyPigp
Cit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckNDOjpOVjEyLAor
ICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAgICAgIFBsYW5l
RGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDEsIDE+PigpOworfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1hdDo6Rm91ckND
OjpOVjIxPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlhdGU8Rm91ckND
OjpOVjIxLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwgMD4sCisgICAg
ICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDEsIDE+PigpOworfQorCit0ZW1wbGF0
ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1h
dDo6Rm91ckNDOjpZVVkyPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlh
dGU8Rm91ckNDOjpZVVkyLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpHUjg4LCAw
LCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBETUFCdWZGb3Jt
YXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVZZVT4oKQoreworICAgIHJldHVybiBE
TUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6WVZZVSwKKyAgICAgICAgUGxhbmVEZWZp
bml0aW9uPEZvdXJDQzo6R1I4OCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBE
TUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlVZ
Vlk+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6OlVZ
VlksCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxGb3VyQ0M6OkdSODgsIDAsIDA+PigpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERN
QUJ1ZkZvcm1hdDo6Rm91ckNDOjpWWVVZPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6
aW5zdGFudGlhdGU8Rm91ckNDOjpZVllVLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckND
OjpHUjg4LCAwLCAwPj4oKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIERNQUJ1ZkZvcm1hdCBE
TUFCdWZGb3JtYXQ6OmNyZWF0ZTxETUFCdWZGb3JtYXQ6OkZvdXJDQzo6VlVZQT4oKQoreworICAg
IHJldHVybiBETUFCdWZGb3JtYXQ6Omluc3RhbnRpYXRlPEZvdXJDQzo6VlVZQSwKKyAgICAgICAg
UGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6QUJHUjg4ODgsIDAsIDA+PigpOworfQorCit0ZW1wbGF0
ZTw+CitpbmxpbmUgRE1BQnVmRm9ybWF0IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlPERNQUJ1ZkZvcm1h
dDo6Rm91ckNDOjpBWVVWPigpCit7CisgICAgcmV0dXJuIERNQUJ1ZkZvcm1hdDo6aW5zdGFudGlh
dGU8Rm91ckNDOjpWVVlBLAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpBQkdSODg4
OCwgMCwgMD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVm
Rm9ybWF0OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0NDQ+KCkKK3sKKyAgICByZXR1
cm4gRE1BQnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6Olk0NDQsCisgICAgICAgIFBsYW5l
RGVmaW5pdGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZv
dXJDQzo6UjgsIDAsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMCwg
MD4+KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0
OjpjcmVhdGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MUI+KCkKK3sKKyAgICByZXR1cm4gRE1B
QnVmRm9ybWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6Olk0MUIsCisgICAgICAgIFBsYW5lRGVmaW5p
dGlvbjxGb3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6
UjgsIDIsIDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMiwgMD4+KCk7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVh
dGU8RE1BQnVmRm9ybWF0OjpGb3VyQ0M6Olk0MkI+KCkKK3sKKyAgICByZXR1cm4gRE1BQnVmRm9y
bWF0OjppbnN0YW50aWF0ZTxGb3VyQ0M6Olk0MkIsCisgICAgICAgIFBsYW5lRGVmaW5pdGlvbjxG
b3VyQ0M6OlI4LCAwLCAwPiwKKyAgICAgICAgUGxhbmVEZWZpbml0aW9uPEZvdXJDQzo6UjgsIDEs
IDA+LAorICAgICAgICBQbGFuZURlZmluaXRpb248Rm91ckNDOjpSOCwgMSwgMD4+KCk7Cit9CisK
K2lubGluZSBETUFCdWZGb3JtYXQgRE1BQnVmRm9ybWF0OjpjcmVhdGUodWludDMyX3QgZm91cmNj
VmFsdWUpCit7CisgICAgc3dpdGNoIChmb3VyY2NWYWx1ZSkgeworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpYUkdCODg4OCk6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpYUkdCODg4
OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WEJHUjg4ODgpOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6WEJHUjg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6
OlJHQlg4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlJHQlg4ODg4PigpOwor
ICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpCR1JYODg4OCk6CisgICAgICAgIHJldHVybiBjcmVh
dGU8Rm91ckNDOjpCR1JYODg4OD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QVJHQjg4
ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6QVJHQjg4ODg+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6OkFCR1I4ODg4KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3Vy
Q0M6OkFCR1I4ODg4PigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpSR0JBODg4OCk6Cisg
ICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpSR0JBODg4OD4oKTsKKyAgICBjYXNlIHVpbnQz
Ml90KEZvdXJDQzo6QkdSQTg4ODgpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6QkdS
QTg4ODg+KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Okk0MjApOgorICAgICAgICByZXR1
cm4gY3JlYXRlPEZvdXJDQzo6STQyMD4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WVYx
Mik6CisgICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpZVjEyPigpOworICAgIGNhc2UgdWlu
dDMyX3QoRm91ckNDOjpBNDIwKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OkE0MjA+
KCk7CisgICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6Ok5WMTIpOgorICAgICAgICByZXR1cm4gY3Jl
YXRlPEZvdXJDQzo6TlYxMj4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6TlYyMSk6Cisg
ICAgICAgIHJldHVybiBjcmVhdGU8Rm91ckNDOjpOVjIxPigpOworICAgIGNhc2UgdWludDMyX3Qo
Rm91ckNDOjpZVVkyKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OllVWTI+KCk7Cisg
ICAgY2FzZSB1aW50MzJfdChGb3VyQ0M6OllWWVUpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZv
dXJDQzo6WVZZVT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6VVlWWSk6CisgICAgICAg
IHJldHVybiBjcmVhdGU8Rm91ckNDOjpVWVZZPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckND
OjpWWVVZKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6OlVZVlk+KCk7CisgICAgY2Fz
ZSB1aW50MzJfdChGb3VyQ0M6OlZVWUEpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6
VlVZQT4oKTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6QVlVVik6CisgICAgICAgIHJldHVy
biBjcmVhdGU8Rm91ckNDOjpBWVVWPigpOworICAgIGNhc2UgdWludDMyX3QoRm91ckNDOjpZNDQ0
KToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZTxGb3VyQ0M6Olk0NDQ+KCk7CisgICAgY2FzZSB1aW50
MzJfdChGb3VyQ0M6Olk0MUIpOgorICAgICAgICByZXR1cm4gY3JlYXRlPEZvdXJDQzo6WTQxQj4o
KTsKKyAgICBjYXNlIHVpbnQzMl90KEZvdXJDQzo6WTQyQik6CisgICAgICAgIHJldHVybiBjcmVh
dGU8Rm91ckNDOjpZNDJCPigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZPYmplY3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wODY0NDQ0NDM5NGY3YjlkOWZmNDNkY2JkYzM5MmFiYWE3N2NjNWE3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1Zk9i
amVjdC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRNQUJ1ZkZvcm1hdC5oIgorI2luY2x1
ZGUgIkRNQUJ1ZlJlbGVhc2VGbGFnLmgiCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0
ZGRlZj4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBETUFCdWZPYmplY3QgeworICAgIERNQUJ1Zk9iamVjdCh1
aW50cHRyX3QgaGFuZGxlKQorICAgICAgICA6IGhhbmRsZShoYW5kbGUpCisgICAgeyB9CisKKyAg
ICB+RE1BQnVmT2JqZWN0KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmZFtpXSAhPSAtMSkK
KyAgICAgICAgICAgICAgICBjbG9zZShmZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBE
TUFCdWZPYmplY3QoY29uc3QgRE1BQnVmT2JqZWN0JikgPSBkZWxldGU7CisgICAgRE1BQnVmT2Jq
ZWN0JiBvcGVyYXRvcj0oY29uc3QgRE1BQnVmT2JqZWN0JikgPSBkZWxldGU7CisKKyAgICBETUFC
dWZPYmplY3QoRE1BQnVmT2JqZWN0JiYgbykKKyAgICAgICAgOiBoYW5kbGUoby5oYW5kbGUpCisg
ICAgICAgICwgZm9ybWF0KG8uZm9ybWF0KQorICAgICAgICAsIHdpZHRoKG8ud2lkdGgpCisgICAg
ICAgICwgaGVpZ2h0KG8uaGVpZ2h0KQorICAgICAgICAsIHJlbGVhc2VGbGFnKFdURk1vdmUoby5y
ZWxlYXNlRmxhZykpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9y
bWF0Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICBmZFtpXSA9IG8uZmRbaV07CisgICAg
ICAgICAgICBvLmZkW2ldID0gLTE7CisKKyAgICAgICAgICAgIG9mZnNldFtpXSA9IG8ub2Zmc2V0
W2ldOworICAgICAgICAgICAgc3RyaWRlW2ldID0gby5zdHJpZGVbaV07CisgICAgICAgICAgICBt
b2RpZmllcltpXSA9IG8ubW9kaWZpZXJbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBETUFC
dWZPYmplY3QmIG9wZXJhdG9yPShETUFCdWZPYmplY3QmJiBvKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMgPT0gJm8pCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgdGhpcy0+
fkRNQUJ1Zk9iamVjdCgpOworICAgICAgICBuZXcgKHRoaXMpIERNQUJ1Zk9iamVjdChXVEZNb3Zl
KG8pKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHVpbnRwdHJfdCBoYW5k
bGUgeyAwIH07CisgICAgRE1BQnVmRm9ybWF0IGZvcm1hdCB7IH07CisgICAgdWludDMyX3Qgd2lk
dGggeyAwIH07CisgICAgdWludDMyX3QgaGVpZ2h0IHsgMCB9OworICAgIERNQUJ1ZlJlbGVhc2VG
bGFnIHJlbGVhc2VGbGFnIHsgfTsKKyAgICBzdGQ6OmFycmF5PGludCwgRE1BQnVmRm9ybWF0Ojpj
X21heFBsYW5lcz4gZmQgeyAtMSwgLTEsIC0xLCAtMSB9OworICAgIHN0ZDo6YXJyYXk8c2l6ZV90
LCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBvZmZzZXQgeyAwLCAwLCAwLCAwIH07CisgICAg
c3RkOjphcnJheTx1aW50MzJfdCwgRE1BQnVmRm9ybWF0OjpjX21heFBsYW5lcz4gc3RyaWRlIHsg
MCwgMCwgMCwgMCB9OworICAgIHN0ZDo6YXJyYXk8dWludDY0X3QsIERNQUJ1ZkZvcm1hdDo6Y19t
YXhQbGFuZXM+IG1vZGlmaWVyIHsgMCwgMCwgMCwgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0RNQUJ1ZlJlbGVhc2VGbGFnLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
Ym0vRE1BQnVmUmVsZWFzZUZsYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjRkNzc2MDA1M2Y5OWM1NTg3NjUw
YTA4NmFhYjk3MTA0ODc1ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2JtL0RNQUJ1ZlJlbGVhc2VGbGFnLmgKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENv
cHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjaW5jbHVkZSA8d3RmL1VuaVN0ZEV4dHJhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBETUFCdWZSZWxlYXNlRmxhZyB7CisgICAg
RE1BQnVmUmVsZWFzZUZsYWcoKSA9IGRlZmF1bHQ7CisKKyAgICBlbnVtIEluaXRpYWxpemVUYWcg
eyBJbml0aWFsaXplIH07CisgICAgRE1BQnVmUmVsZWFzZUZsYWcoSW5pdGlhbGl6ZVRhZykKKyAg
ICB7CisgICAgICAgIGZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyB8IEVGRF9OT05CTE9DSyk7
CisgICAgfQorCisgICAgfkRNQUJ1ZlJlbGVhc2VGbGFnKCkKKyAgICB7CisgICAgICAgIGlmIChm
ZCAhPSAtMSkKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgZmQgPSAtMTsKKyAgICB9
CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyhjb25zdCBETUFCdWZSZWxlYXNlRmxhZyYpID0gZGVs
ZXRlOworICAgIERNQUJ1ZlJlbGVhc2VGbGFnJiBvcGVyYXRvcj0oY29uc3QgRE1BQnVmUmVsZWFz
ZUZsYWcmKSA9IGRlbGV0ZTsKKworICAgIERNQUJ1ZlJlbGVhc2VGbGFnKERNQUJ1ZlJlbGVhc2VG
bGFnJiYgbykKKyAgICB7CisgICAgICAgIGZkID0gby5mZDsKKyAgICAgICAgby5mZCA9IC0xOwor
ICAgIH0KKworICAgIERNQUJ1ZlJlbGVhc2VGbGFnJiBvcGVyYXRvcj0oRE1BQnVmUmVsZWFzZUZs
YWcmJiBvKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm8pCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisKKyAgICAgICAgdGhpcy0+fkRNQUJ1ZlJlbGVhc2VGbGFnKCk7CisgICAgICAg
IG5ldyAodGhpcykgRE1BQnVmUmVsZWFzZUZsYWcoV1RGTW92ZShvKSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBETUFCdWZSZWxlYXNlRmxhZyBkdXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
ICAgICBETUFCdWZSZWxlYXNlRmxhZyBmbGFnOworICAgICAgICBmbGFnLmZkID0gZHVwQ2xvc2VP
bkV4ZWMoZmQpOworICAgICAgICByZXR1cm4gZmxhZzsKKyAgICB9CisKKyAgICBib29sIHJlbGVh
c2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIHVpbnQ2NF90IHZhbHVlIHsgMCB9OworICAgICAgICBpZiAo
cmVhZChmZCwgJnZhbHVlLCBzaXplb2YodWludDY0X3QpKSA9PSBzaXplb2YodWludDY0X3QpKQor
ICAgICAgICAgICAgcmV0dXJuICEhdmFsdWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICB2b2lkIHJlbGVhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVpbnQ2NF90IHZhbHVlIHsgMSB9OworICAgICAg
ICB3cml0ZShmZCwgJnZhbHVlLCBzaXplb2YodWludDY0X3QpKTsKKyAgICB9CisKKyAgICBpbnQg
ZmQgeyAtMSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWlu
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40N2E3MDYwODRlOTg0YzIyMDljZWNhYmQwOWFhNzZhNTVjODUzZmUw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0dCTUJ1ZmZlclN3YXBjaGFpbi5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R0JNQnVmZmVyU3dhcGNoYWluLmgiCisKKyNpbmNsdWRlICJHQk1EZXZpY2UuaCIKKyNpbmNsdWRl
IDxnYm0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHQk1CdWZmZXJTd2FwY2hhaW46OkdC
TUJ1ZmZlclN3YXBjaGFpbihCdWZmZXJTd2FwY2hhaW5TaXplIHNpemUpCit7CisgICAgQVNTRVJU
KHVuc2lnbmVkKHNpemUpIDwgY19tYXhCdWZmZXJzKTsKKyAgICBtX2FycmF5LnNpemUgPSB1bnNp
Z25lZChzaXplKTsKK30KKworR0JNQnVmZmVyU3dhcGNoYWluOjp+R0JNQnVmZmVyU3dhcGNoYWlu
KCkgPSBkZWZhdWx0OworCitSZWZQdHI8R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI+IEdCTUJ1
ZmZlclN3YXBjaGFpbjo6Z2V0QnVmZmVyKGNvbnN0IEJ1ZmZlckRlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKK3sKKyAgICBhdXRvJiBkZXZpY2UgPSBHQk1EZXZpY2U6OmdldCgpOworCisgICAgLy8g
SWYgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZXF1ZXN0ZWQgYnVmZmVycyBoYXMgY2hhbmdlZCwg
dXBkYXRlIHRoZSBkZXNjcmlwdGlvbiB0byB0aGUgbmV3IG9uZSBhbmQgd3JlY2sgdGhlIGV4aXN0
aW5nIGJ1ZmZlcnMuCisgICAgLy8gVGhpcyBzaG91bGQgaGFuZGxlIGNoYW5nZXMgaW4gZm9ybWF0
IG9yIGRpbWVuc2lvbiBvZiB0aGUgYnVmZmVycy4KKyAgICBpZiAoZGVzY3JpcHRpb24uZm9ybWF0
LmZvdXJjYyAhPSBtX2FycmF5LmRlc2NyaXB0aW9uLmZvcm1hdC5mb3VyY2MgfHwgZGVzY3JpcHRp
b24ud2lkdGggIT0gbV9hcnJheS5kZXNjcmlwdGlvbi53aWR0aCB8fCBkZXNjcmlwdGlvbi5oZWln
aHQgIT0gbV9hcnJheS5kZXNjcmlwdGlvbi5oZWlnaHQpIHsKKyAgICAgICAgbV9hcnJheS5kZXNj
cmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICBtX2FycmF5Lm9iamVjdCA9IHsgfTsKKyAg
ICB9CisKKyAgICAvLyBTd2FwY2hhaW4gd2FzIGFza2VkIHRvIHByb3ZpZGUgYSBidWZmZXIuIFRo
ZSBidWZmZXIgYXJyYXkgaXMgdHJhdmVyc2VkIHRvIGZpbmQgb25lLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FycmF5LnNpemU7ICsraSkgeworICAgICAgICBpZiAoIW1fYXJyYXku
b2JqZWN0W2ldKSB7CisgICAgICAgICAgICAvLyBJZiBubyBidWZmZXIgd2FzIHNwYXduZWQgeWV0
IGF0IHRoaXMgbG9jYXRpb24sIHdlIGRvIHRoYXQsIGFuZCByZXR1cm4gaXQuCisgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IGFkb3B0UmVmKCpuZXcgQnVmZmVyKG1faGFuZGxlR2VuZXJhdG9yKyss
IGRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBtX2FycmF5Lm9iamVjdFtpXSA9IGJ1ZmZlci5j
b3B5UmVmKCk7CisKKyAgICAgICAgICAgIC8vIEZpbGwgb3V0IHRoZSBidWZmZXIncyBkZXNjcmlw
dGlvbiBhbmQgcGxhbmUgaW5mb3JtYXRpb24gZm9yIGtub3duIGFuZCBzdXBwb3J0ZWQgZm9ybWF0
cy4KKyAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uZm9ybWF0LmZvdXJjYykgeworICAg
ICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJHQjg4ODg6CisgICAgICAgICAg
ICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpYQkdSODg4ODoKKyAgICAgICAgICAgIGNhc2Ug
RE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlJHQlg4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6QkdSWDg4ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpBUkdCODg4ODoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6
OkFCR1I4ODg4OgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6UkdCQTg4
ODg6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JBODg4ODoKKyAg
ICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Okk0MjA6CisgICAgICAgICAgICBj
YXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZVjEyOgorICAgICAgICAgICAgY2FzZSBETUFCdWZG
b3JtYXQ6OkZvdXJDQzo6QTQyMDoKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3Vy
Q0M6Ok5WMTI6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpOVjIxOgor
ICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WVVZMjoKKyAgICAgICAgICAg
IGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OllWWVU6CisgICAgICAgICAgICBjYXNlIERNQUJ1
ZkZvcm1hdDo6Rm91ckNDOjpVWVZZOgorICAgICAgICAgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6VllVWToKKyAgICAgICAgICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE6
CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBWVVWOgorICAgICAgICAg
ICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQ0NDoKKyAgICAgICAgICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6Olk0MUI6CisgICAgICAgICAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6
Rm91ckNDOjpZNDJCOgorICAgICAgICAgICAgICAgIGJ1ZmZlci0+bV9kZXNjcmlwdGlvbi5mb3Jt
YXQubnVtUGxhbmVzID0gZGVzY3JpcHRpb24uZm9ybWF0Lm51bVBsYW5lczsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyLT5tX2Rlc2NyaXB0aW9uLmZvcm1h
dC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBidWZmZXItPm1fcGxhbmVz
W2ldLmZvdXJjYyA9IGRlc2NyaXB0aW9uLmZvcm1hdC5wbGFuZXNbaV0uZm91cmNjOworICAgICAg
ICAgICAgICAgICAgICBidWZmZXItPm1fcGxhbmVzW2ldLndpZHRoID0gZGVzY3JpcHRpb24uZm9y
bWF0LnBsYW5lV2lkdGgoaSwgZGVzY3JpcHRpb24ud2lkdGgpOworICAgICAgICAgICAgICAgICAg
ICBidWZmZXItPm1fcGxhbmVzW2ldLmhlaWdodCA9IGRlc2NyaXB0aW9uLmZvcm1hdC5wbGFuZUhl
aWdodChpLCBkZXNjcmlwdGlvbi5oZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIHBs
YW5lLCB3ZSBzcGF3biBhIGdibV9ibyBvYmplY3Qgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUgYW5k
IGZvcm1hdC4KKyAgICAgICAgICAgIC8vIFRPRE86IEdCTV9CT19VU0VfTElORUFSIHdpbGwgYmUg
bmVlZGVkIHdoZW4gdHJhbnNmZXJyaW5nIG1lbW9yeSBpbnRvIHRoZSBibyAoZS5nLiBjb3B5aW5n
CisgICAgICAgICAgICAvLyBvdmVyIHRoZSBzb2Z0d2FyZS1kZWNvZGVkIHZpZGVvIGRhdGEpLCBi
dXQgbWlnaHQgbm90IGJlIHJlcXVpcmVkIGZvciBiYWNraW5nIGUuZy4gQU5HTEUgcmVuZGVyaW5n
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlci0+bV9kZXNjcmlw
dGlvbi5mb3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwbGFu
ZSA9IGJ1ZmZlci0+bV9wbGFuZXNbaV07CisgICAgICAgICAgICAgICAgcGxhbmUuYm8gPSBnYm1f
Ym9fY3JlYXRlKGRldmljZS5kZXZpY2UoKSwgcGxhbmUud2lkdGgsIHBsYW5lLmhlaWdodCwgdWlu
dDMyX3QocGxhbmUuZm91cmNjKSwgR0JNX0JPX1VTRV9MSU5FQVIpOworICAgICAgICAgICAgICAg
IHBsYW5lLnN0cmlkZSA9IGdibV9ib19nZXRfc3RyaWRlKHBsYW5lLmJvKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gTG9jayB0aGUgYnVmZmVyIGFuZCByZXR1cm4gaXQuCisgICAg
ICAgICAgICBidWZmZXItPm1fc3RhdGUubG9ja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBidWZmZXI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGV4
aXN0aW5nIGJ1ZmZlciBhdCB0aGlzIGxvY2F0aW9uLiBJZiBtYXJrZWQgYXMgbG9ja2VkLCB1cGRh
dGUgaXRzIHN0YXRlIGJ5IHJlYWRpbmcKKyAgICAgICAgLy8gdGhlIHJlbGVhc2UgZmxhZy4gSWYg
c3RpbGwgbG9ja2VkIGFmdGVyIHRoYXQsIHdlIGhhdmUgdG8gY29udGludWUgb3ZlciB0byB0aGUg
bmV4dCBjYW5kaWRhdGUuCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1f
YXJyYXkub2JqZWN0W2ldOworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bV9zdGF0ZS5sb2NrZWQp
CisgICAgICAgICAgICAgICAgYnVmZmVyLT5tX3N0YXRlLmxvY2tlZCA9ICFidWZmZXItPm1fc3Rh
dGUucmVsZWFzZUZsYWcucmVsZWFzZWQoKTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bV9z
dGF0ZS5sb2NrZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUaGlzIGJ1ZmZlciB3YXMgdW5sb2NrZWQsIHNvIGl0IGNhbiBiZSB1c2VkLiBMb2Nr
IGFuZCByZXR1cm4gaXQuCisgICAgICAgIGF1dG8gYnVmZmVyID0gbV9hcnJheS5vYmplY3RbaV0u
Y29weVJlZigpOworICAgICAgICBidWZmZXItPm1fc3RhdGUubG9ja2VkID0gdHJ1ZTsKKworICAg
ICAgICAvLyBTd2FwIG91dCB0aGUgbG9jYXRlZCBidWZmZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVm
ZmVyIHF1ZXVlLiBXaGVuIHRoZSBuZXh0IGJ1ZmZlciBpcyByZXF1ZXN0ZWQgZnJvbSB0aGlzCisg
ICAgICAgIC8vIHN3YXBjaGFpbiwgdGhlIHByZXZpb3VzbHktdXNlZCBidWZmZXJzIHdpbGwgYmUg
dHJhdmVyc2VkIGFuZCB0ZXN0ZWQgZm9yIHJlbGVhc2UgZmlyc3QsIG1lYW5pbmcgdGhlcmUncyBh
CisgICAgICAgIC8vIGhpZ2hlciBjaGFuY2Ugd2Ugd2lsbCBiZSBhYmxlIHRvIHJldXNlIHRoZW0s
IHdpdGhvdXQgdGhlIHBlbmFsdHkgb2YgaGF2aW5nIHRvIHRyYXZlcnNlIHRvIGRlZXAgaW50byB0
aGUKKyAgICAgICAgLy8gc3dhcGNoYWluIGFycmF5LgorICAgICAgICBmb3IgKCsraTsgaSA8IG1f
YXJyYXkuc2l6ZSAmJiAhIW1fYXJyYXkub2JqZWN0W2ldOyArK2kpCisgICAgICAgICAgICBzdGQ6
OnN3YXAobV9hcnJheS5vYmplY3RbaSAtIDFdLCBtX2FycmF5Lm9iamVjdFtpXSk7CisKKyAgICAg
ICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR0JN
QnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6OkJ1ZmZlcih1aW50MzJfdCBoYW5kbGUsIGNvbnN0IEJ1
ZmZlckRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKKyAg
ICAsIG1fZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pCit7CisgICAgbV9zdGF0ZS5yZWxlYXNlRmxh
ZyA9IERNQUJ1ZlJlbGVhc2VGbGFnKERNQUJ1ZlJlbGVhc2VGbGFnOjpJbml0aWFsaXplKTsKK30K
KworR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI6On5CdWZmZXIoKSA9IGRlZmF1bHQ7CisKK0RN
QUJ1Zk9iamVjdCBHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcjo6Y3JlYXRlRE1BQnVmT2JqZWN0
KHVpbnRwdHJfdCBoYW5kbGUpIGNvbnN0Cit7CisgICAgRE1BQnVmT2JqZWN0IG9iamVjdChoYW5k
bGUpOworICAgIG9iamVjdC5mb3JtYXQgPSBtX2Rlc2NyaXB0aW9uLmZvcm1hdDsKKyAgICBvYmpl
Y3Qud2lkdGggPSBtX2Rlc2NyaXB0aW9uLndpZHRoOworICAgIG9iamVjdC5oZWlnaHQgPSBtX2Rl
c2NyaXB0aW9uLmhlaWdodDsKKyAgICBvYmplY3QucmVsZWFzZUZsYWcgPSBtX3N0YXRlLnJlbGVh
c2VGbGFnLmR1cCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRp
b24uZm9ybWF0Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgIG9iamVjdC5mZFtpXSA9IGdibV9i
b19nZXRfZmQobV9wbGFuZXNbaV0uYm8pOworICAgICAgICBvYmplY3Qub2Zmc2V0W2ldID0gMDsK
KyAgICAgICAgb2JqZWN0LnN0cmlkZVtpXSA9IG1fcGxhbmVzW2ldLnN0cmlkZTsKKyAgICAgICAg
Ly8gVE9ETzogdGhlc2Ugc2hvdWxkIGJlIHRoZSBwbGFuZS1zcGVjaWZpYyBtb2RpZmllcnMuIFdl
IGRvbid0IHVzZSB0aGVtIHlldC4KKyAgICAgICAgb2JqZWN0Lm1vZGlmaWVyW2ldID0gMDsKKyAg
ICB9CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZl
cjo6UGxhbmVEYXRhOjp+UGxhbmVEYXRhKCkKK3sKKyAgICBpZiAoYm8pCisgICAgICAgIGdibV9i
b19kZXN0cm95KGJvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFpbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTUJ1ZmZlclN3YXBjaGFp
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM4NDI0MTA2ZjNiNWM3ZjVkZDA1MzA3NzUyMWViN2FkZGEzMDA4NDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0v
R0JNQnVmZmVyU3dhcGNoYWluLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRNQUJ1ZkZv
cm1hdC5oIgorI2luY2x1ZGUgIkRNQUJ1Zk9iamVjdC5oIgorI2luY2x1ZGUgIkRNQUJ1ZlJlbGVh
c2VGbGFnLmgiCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvTm9ubW92YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
Kworc3RydWN0IGdibV9ibzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHQk1CdWZm
ZXJTd2FwY2hhaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R0JNQnVmZmVyU3dhcGNo
YWluPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gVGhl
IHNpemUgc2hvdWxkIGJlIGFkanVzdGVkIHRvIHRoZSB1c2UtY2FzZS4KKyAgICAvLyBGb3IgY3lj
bGljYWwgcmVuZGVyaW5nIChlLmcuIFdlYkdMKSwgRm91ciBzaG91bGQgYmUgaWRlYWwgc2luY2Ug
d2UnbGwgcmVseSBvbgorICAgIC8vIHNvbWV0aGluZyBsaWtlIHZzeW5jIHRvIG1haW50YWluIGEg
Y29uc3RhbnQgZnJhbWVyYXRlIGFuZCBzdWJzZXF1ZW50IGJ1ZmZlciBjaHVybi4KKyAgICAvLyBU
aGVyZSBhcmUgb3RoZXIgc3BvcmFkaWMgcHJvZHVjZXJzIGxpa2Ugc29mdHdhcmUtYmFzZWQgbWVk
aWEgZGVjb2RlcnMgdGhhdCB3aWxsCisgICAgLy8gYmUgcmVxdWVzdGluZyBhbmQgZmlsbGluZyBp
biBidWZmZXJzIGluIGJ1cnN0cyBidXQgc3RpbGwgaGF2ZSB0aGVtIGRpc3BsYXllZCBvbgorICAg
IC8vIGEgY3ljbGljYWwgYmFzaXMuIEVpZ2h0IHNob3VsZCBiZSBlbm91Z2ggdG8gY292ZXIgdGhh
dC4KKyAgICAvLyBJbiBhbnkgY2FzZSwgdGhlIHN3YXBjaGFpbiB3aWxsIGRvIHdoYXRldmVyIGl0
IGNhbiB0byByZXVzZSByZWxlYXNlZCBidWZmZXJzCisgICAgLy8gYW5kIG5vdCB1bm5lY2Vzc2Fy
aWx5IHNwYXduIG5ldyBvbmVzLCBtZWFuaW5nIHRoZSBsaW1pdCBzaG91bGRuJ3QgYmUgcmVhY2hl
ZC4KKyAgICAvLyBJZiBpdCBpcywgZ2V0QnVmZmVyKCkgd2lsbCByZXR1cm4gYSBudWxsIG9iamVj
dCBhbmQgdGhlIHByb2R1Y2VyIGhhcyB0bworICAgIC8vIGhhbmRsZSB0aGF0IHNvbWVob3cuCisg
ICAgZW51bSBjbGFzcyBCdWZmZXJTd2FwY2hhaW5TaXplIDogdW5zaWduZWQgeworICAgICAgICBG
b3VyID0gNCwKKyAgICAgICAgRWlnaHQgPSA4CisgICAgfTsKKworICAgIEdCTUJ1ZmZlclN3YXBj
aGFpbihCdWZmZXJTd2FwY2hhaW5TaXplKTsKKyAgICB+R0JNQnVmZmVyU3dhcGNoYWluKCk7CisK
KyAgICBzdHJ1Y3QgQnVmZmVyRGVzY3JpcHRpb24geworICAgICAgICBETUFCdWZGb3JtYXQgZm9y
bWF0IHsgfTsKKyAgICAgICAgdWludDMyX3Qgd2lkdGggeyAwIH07CisgICAgICAgIHVpbnQzMl90
IGhlaWdodCAgeyAwIH07CisgICAgfTsKKworICAgIGNsYXNzIEJ1ZmZlciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxCdWZmZXI+IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgcHVibGljOgorICAgICAgICBCdWZmZXIodWludDMyX3QsIGNvbnN0IEJ1ZmZlckRl
c2NyaXB0aW9uJik7CisgICAgICAgIH5CdWZmZXIoKTsKKworICAgICAgICBETUFCdWZPYmplY3Qg
Y3JlYXRlRE1BQnVmT2JqZWN0KHVpbnRwdHJfdCkgY29uc3Q7CisKKyAgICAgICAgc3RydWN0IFBs
YW5lRGF0YSB7CisgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbGFuZURhdGEpOwor
ICAgICAgICAgICAgV1RGX01BS0VfTk9OTU9WQUJMRShQbGFuZURhdGEpOworCisgICAgICAgICAg
ICBQbGFuZURhdGEoKSA9IGRlZmF1bHQ7CisgICAgICAgICAgICB+UGxhbmVEYXRhKCk7CisKKyAg
ICAgICAgICAgIERNQUJ1ZkZvcm1hdDo6Rm91ckNDIGZvdXJjYyB7IERNQUJ1ZkZvcm1hdDo6Rm91
ckNDOjpJbnZhbGlkIH07CisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCB7IDAgfTsKKyAgICAg
ICAgICAgIHVpbnQzMl90IGhlaWdodCB7IDAgfTsKKyAgICAgICAgICAgIHVpbnQzMl90IHN0cmlk
ZSB7IDAgfTsKKyAgICAgICAgICAgIHN0cnVjdCBnYm1fYm8qIGJvIHsgbnVsbHB0ciB9OworICAg
ICAgICB9OworCisgICAgICAgIHVpbnQzMl90IGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFu
ZGxlOyB9CisKKyAgICAgICAgdW5zaWduZWQgbnVtUGxhbmVzKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXNjcmlwdGlvbi5mb3JtYXQubnVtUGxhbmVzOyB9CisgICAgICAgIGNvbnN0IFBsYW5lRGF0YSYg
cGxhbmVEYXRhKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoaW5kZXggPCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3BsYW5lc1tpbmRleF07CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGZyaWVuZCBjbGFzcyBHQk1CdWZmZXJTd2FwY2hhaW47CisKKyAgICAgICAgdWludDMyX3QgbV9o
YW5kbGUgeyAwIH07CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29sIGxvY2tlZCB7
IGZhbHNlIH07CisgICAgICAgICAgICBETUFCdWZSZWxlYXNlRmxhZyByZWxlYXNlRmxhZzsKKyAg
ICAgICAgfSBtX3N0YXRlOworCisgICAgICAgIEJ1ZmZlckRlc2NyaXB0aW9uIG1fZGVzY3JpcHRp
b247CisgICAgICAgIHN0ZDo6YXJyYXk8UGxhbmVEYXRhLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxh
bmVzPiBtX3BsYW5lczsKKyAgICB9OworCisgICAgUmVmUHRyPEJ1ZmZlcj4gZ2V0QnVmZmVyKGNv
bnN0IEJ1ZmZlckRlc2NyaXB0aW9uJik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjX21heEJ1ZmZlcnMgPSA4OworCisgICAgdWludDMyX3QgbV9oYW5kbGVHZW5l
cmF0b3IgeyAwIH07CisgICAgc3RydWN0IHsKKyAgICAgICAgQnVmZmVyRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb247CisgICAgICAgIHVuc2lnbmVkIHNpemUgeyAwIH07CisgICAgICAgIHN0ZDo6YXJy
YXk8UmVmUHRyPEJ1ZmZlcj4sIGNfbWF4QnVmZmVycz4gb2JqZWN0IHsgfTsKKyAgICB9IG1fYXJy
YXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZW
aWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDcwZjIwNDc0MzE1OThhMGNiMzhlNGM2ZDM1Yzg4
YTQxNTU1OWJlNGEuLmMxMzg2Y2E4ZTllMGRhNjY2ZDdlYzU3ZTE0MTdhOGJkNGRhOTA4YmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFC
dWZWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0xNjAsMTIg
KzE2MCwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG1hYnVmX3ZpZGVvX3NpbmtfY2xhc3NfaW5p
dChXZWJLaXRETUFCdWZWaWRlb1NpbmtDbGFzcyoga2xhcwogICAgICAgICAiU2luayBTdGF0aXN0
aWNzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJB
TV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CiB9CiAKLXZvaWQgd2ViS2l0
RE1BQnVmVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdERNQUJ1ZlZpZGVvU2lu
ayogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCitib29sIHdlYktp
dERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpCiB7Ci0gICAgV2ViS2l0RE1BQnVmVmlkZW9TaW5r
UHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0KLSAgICBwcml2LT5tZWRpYVBsYXllclByaXZh
dGUgPSBwbGF5ZXI7Ci0gICAgd2ViS2l0VmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKHBy
aXYtPmFwcFNpbmsuZ2V0KCksIHByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSk7CisgICAgc3RhdGlj
IGJvb2wgc19lbmFibGVkID0gZmFsc2U7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHNfZmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzX2ZsYWcsCisgICAgICAgIFsmXSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdfZ2V0ZW52KCJXRUJLSVRfR1NUX0RNQUJVRl9TSU5LX0VO
QUJMRUQiKTsKKyAgICAgICAgICAgIHNfZW5hYmxlZCA9IHZhbHVlICYmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIpIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICIxIikpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gc19lbmFibGVkOwogfQogCiBib29sIHdl
YktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKQpAQCAtMTczLDQgKzE3NywxMiBAQCBi
b29sIHdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKQogICAgIHJldHVybiBpc0dT
dHJlYW1lclBsdWdpbkF2YWlsYWJsZSgiYXBwIik7CiB9CiAKK3ZvaWQgd2ViS2l0RE1BQnVmVmlk
ZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdERNQUJ1ZlZpZGVvU2luayogc2luaywg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgV2ViS2l0RE1BQnVm
VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBwcml2LT5tZWRpYVBs
YXllclByaXZhdGUgPSBwbGF5ZXI7CisgICAgd2ViS2l0VmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQ
cml2YXRlKHByaXYtPmFwcFNpbmsuZ2V0KCksIHByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSk7Cit9
CisKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5rR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRE1BQnVmVmlkZW9TaW5r
R1N0cmVhbWVyLmgKaW5kZXggZGYyNGE2ZjBmYTM3ZDIzNzU1MWU2ODE2OWFjYWE3OWQ3Yzk5MGZm
Mi4uMzI4ZThiN2ViOWMxNzcxYzkwY2Y4Mzk4NzY2MTY0NjU4OGI3YjdjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lu
a0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtNTAsNiArNTAsNyBAQCBzdHJ1Y3Qg
X1dlYktpdERNQUJ1ZlZpZGVvU2lua0NsYXNzIHsKIAogR1R5cGUgd2Via2l0X2RtYWJ1Zl92aWRl
b19zaW5rX2dldF90eXBlKHZvaWQpOwogCitib29sIHdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5h
YmxlZCgpOwogYm9vbCB3ZWJLaXRETUFCdWZWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCk7CiB2b2lk
IHdlYktpdERNQUJ1ZlZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRETUFCdWZW
aWRlb1NpbmsqLCBXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBiZDJk
OTVmNTRkNDM4MDY0ZTkxYjMzZjMxNTAyYjIxMTA5MzFjNjFmLi44NDk5YTFjODQwZmQ3MjZlMTI1
ZTM1MWU1ZGU2NGJkOTExZjE3Njk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtOTIsNiArOTIsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL1VuaVN0
ZEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUu
aD4KIApAQCAtMTE3LDYgKzExOCwxNyBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlHTC5oIgogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAorI2lm
IFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCisjaW5jbHVkZSAiRE1BQnVmRm9ybWF0LmgiCisj
aW5jbHVkZSAiRE1BQnVmT2JqZWN0LmgiCisjaW5jbHVkZSAiRE1BQnVmVmlkZW9TaW5rR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiR0JNQnVmZmVyU3dhcGNoYWluLmgiCisjaW5jbHVkZSAiR0JNRGV2
aWNlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5o
IgorI2luY2x1ZGUgPGdibS5oPgorI2luY2x1ZGUgPGdzdC9hbGxvY2F0b3JzL2dzdGRtYWJ1Zi5o
PgorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCisKICNpZiBVU0UoV1BFX1ZJ
REVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheUxpYldQ
RS5oIgogI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0ZWdsaW1hZ2UuaD4KQEAgLTE1NSwyMyArMTY3
LDMzIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3RE
aWRMb2FkaW5nUHJvZ3Jlc3MoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9kcmF3VGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpy
ZXBhaW50KQogICAgICwgbV9yZWFkeVRpbWVySGFuZGxlcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCkKLSNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBtX25pY29zaWFMYXll
cihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQotI2Vsc2UKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpICYmICFVU0UoTklDT1NJQSkKICAgICAsIG1fcGxhdGZvcm1MYXllclBy
b3h5KGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wpKQogI2Vu
ZGlmCi0jZW5kaWYKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1fbG9nZ2VyKHBs
YXllci0+bWVkaWFQbGF5ZXJMb2dnZXIoKSkKICAgICAsIG1fbG9nSWRlbnRpZmllcihwbGF5ZXIt
Pm1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0RNQUJVRikKKyAgICAsIG1fc3dhcGNoYWluKGFkb3B0UmVmKG5ldyBHQk1CdWZmZXJTd2Fw
Y2hhaW4oR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXJTd2FwY2hhaW5TaXplOjpFaWdodCkpKQor
I2VuZGlmCiB7CiAjaWYgVVNFKEdMSUIpCiAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zZXRQcmlv
cml0eShHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSk7CiAjZW5kaWYKICAgICBtX2lzUGxheWVyU2h1
dHRpbmdEb3duLnN0b3JlKGZhbHNlKTsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYg
VVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6
OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFj
dG9yeSgqdGhpcywKKyAgICAgICAgWyZdKCkgLT4gUmVmPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk+IHsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQorICAgICAgICAgICAg
aWYgKHdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpICYmIHdlYktpdERNQUJ1ZlZpZGVv
U2lua1Byb2JlUGxhdGZvcm0oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmKTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eUdMKTsKKyAgICAgICAgfSgpKSk7CisjZW5kaWYKKwogICAgIGVuc3VyZUdTdHJlYW1lckluaXRp
YWxpemVkKCk7CiAgICAgbV9hdWRpb1NpbmsgPSBjcmVhdGVBdWRpb1NpbmsoKTsKIApAQCAtMjg3
MSw3ICsyODkzLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBlcmZvcm1U
YXNrQXRNZWRpYVRpbWUoRnVuY3Rpb248dm9pZCgpPiYmIHRhc2sKIFBsYXRmb3JtTGF5ZXIqIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYg
VVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOworICAgIHJldHVy
biBtX25pY29zaWFMYXllci5nZXQoKTsKICNlbHNlCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odGhpcyk7CiAjZW5kaWYKQEAgLTI5ODUsNiArMzAw
NywyMzMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9D
b21wb3NpdG9yKCkKIH0KICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQorLy8gR1N0cmVhbWVyJ3MgZ3N0X3ZpZGVvX2Zvcm1h
dF90b19mb3VyY2MoKSBkb2Vzbid0IGNvdmVyIFJHQi1saWtlIGZvcm1hdHMsIHNvIHdlCisvLyBw
cm92aWRlIHRoZSBhcHByb3ByaWF0ZSBGb3VyQ0MgdmFsdWVzIGZvciB0aG9zZSB0aHJvdWdoIHRo
aXMgZnVuY2lvbi4KK3N0YXRpYyB1aW50MzJfdCBmb3VyY2NWYWx1ZShHc3RWaWRlb0Zvcm1hdCBm
b3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JN
QVRfUkdCeDoKKyAgICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpY
QkdSODg4OCk7CisgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6CisgICAgICAgIHJldHVy
biB1aW50MzJfdChETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJHQjg4ODgpOworICAgIGNhc2UgR1NU
X1ZJREVPX0ZPUk1BVF94UkdCOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0
OjpGb3VyQ0M6OkJHUlg4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKKyAg
ICAgICAgcmV0dXJuIHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpSR0JYODg4OCk7Cisg
ICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6CisgICAgICAgIHJldHVybiB1aW50MzJfdChE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6QUJHUjg4ODgpOworICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1B
VF9CR1JBOgorICAgICAgICByZXR1cm4gdWludDMyX3QoRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFS
R0I4ODg4KTsKKyAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKKyAgICAgICAgcmV0dXJu
IHVpbnQzMl90KERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpCR1JBODg4OCk7CisgICAgY2FzZSBHU1Rf
VklERU9fRk9STUFUX0FCR1I6CisgICAgICAgIHJldHVybiB1aW50MzJfdChETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6UkdCQTg4ODgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBnc3RfdmlkZW9fZm9ybWF0X3RvX2ZvdXJjYyhmb3JtYXQpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVzaERNQUJ1ZlRvQ29tcG9zaXRvcigp
Cit7CisgICAgTG9ja2VyIHNhbXBsZUxvY2tlciB7IG1fc2FtcGxlTXV0ZXggfTsKKyAgICBpZiAo
IUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7CisgICAgaWYg
KCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwor
ICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnZpZGVvSW5mbyk7CisgICAgaWYgKCFnc3RfdmlkZW9f
aW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2FwcykpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBsZS5nZXQoKSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIG1ldGEgPSBnc3Rf
YnVmZmVyX2dldF92aWRlb19tZXRhKGJ1ZmZlcik7CisgICAgaWYgKG1ldGEpIHsKKyAgICAgICAg
R1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbykgPSBtZXRhLT53aWR0aDsKKyAgICAgICAg
R1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pID0gbWV0YS0+aGVpZ2h0OworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXRhLT5uX3BsYW5lczsgKytpKSB7CisgICAg
ICAgICAgICBHU1RfVklERU9fSU5GT19QTEFORV9PRkZTRVQoJnZpZGVvSW5mbywgaSkgPSBtZXRh
LT5vZmZzZXRbaV07CisgICAgICAgICAgICBHU1RfVklERU9fSU5GT19QTEFORV9TVFJJREUoJnZp
ZGVvSW5mbywgaSkgPSBtZXRhLT5zdHJpZGVbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh
dXRvJiBwcm94eSA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpOworICAgIEFTU0VSVChpczxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmPihwcm94eSkpOworCisgICAgYXV0byog
ZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXMoY2FwcywgMCk7CisgICAgaWYgKGdzdF9j
YXBzX2ZlYXR1cmVzX2NvbnRhaW5zKGZlYXR1cmVzLCBHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9E
TUFCVUYpKSB7CisgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBoYXJkd2FyZSBkZWNvZGVyIHRoYXQn
cyB5aWVsZGluZyBkbWFidWYgbWVtb3J5LCB3ZSBjYW4gdGFrZSB0aGUgcmVsZXZhbnQgZGF0YSBh
bmQKKyAgICAgICAgLy8gcHVzaCBpdCBpbnRvIHRoZSBjb21wb3NpdGlvbiBwcm9jZXNzLgorCisg
ICAgICAgICsrbV9zYW1wbGVDb3VudDsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IHByb3h5Lmxv
Y2soKSB9OworICAgICAgICBpZiAoIXByb3h5LmlzQWN0aXZlKCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gUHJvdmlkZSB0aGUgRE1BQnVmT2JqZWN0IHdpdGggYSByZWxldmFu
dCBoYW5kbGUgKG1lbW9yeSBhZGRyZXNzKS4gV2hlbiBwcm92aWRlZCBmb3IgdGhlIGZpcnN0IHRp
bWUsCisgICAgICAgIC8vIHRoZSBsYW1iZGEgd2lsbCBiZSBpbnZva2VkIGFuZCBhbGwgZG1hYnVm
IGRhdGEgaXMgZmlsbGVkIGluLgorICAgICAgICBkb3duY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmPihwcm94eSkucHVzaERNQUJ1ZigKKyAgICAgICAgICAgIERNQUJ1
Zk9iamVjdChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ3N0X2J1ZmZlcl9wZWVrX21lbW9y
eShidWZmZXIsIDApKSksCisgICAgICAgICAgICBbJl0oYXV0byYmIG9iamVjdCkgeworICAgICAg
ICAgICAgICAgIG9iamVjdC5mb3JtYXQgPSBETUFCdWZGb3JtYXQ6OmNyZWF0ZShmb3VyY2NWYWx1
ZShHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbykpKTsKKyAgICAgICAgICAgICAgICBv
YmplY3Qud2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QuaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8p
OworCisgICAgICAgICAgICAgICAgLy8gVE9ETzogcmVsZWFzZSBtZWNoYW5pc20gZm9yIGEgZGVj
b2Rlci1wcm92aWRlZCBkbWFidWYgaXMgYSBiaXQgdHJpY2t5LiBUaGUgZG1hYnVmIG9iamVjdAor
ICAgICAgICAgICAgICAgIC8vIGl0c2VsZiBkb2Vzbid0IHByb3ZpZGUgYW55dGhpbmcgdXNlZnVs
LCBidXQgdGhlIGRlY29kZXIgd29uJ3QgcmV1c2UgdGhlIGRtYWJ1ZiB1bnRpbCB0aGUKKyAgICAg
ICAgICAgICAgICAvLyByZWxldmFudCBHc3RTYW1wbGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQgYnkg
dGhlIGRvd25zdHJlYW0gcGlwZWxpbmUuIFNvIGZvciB0aGlzIHRvIHdvcmssCisgICAgICAgICAg
ICAgICAgLy8gdGhlcmUncyBhIG5lZWQgdG8gc29tZWhvdyBhc3NvY2lhdGUgdGhlIEdzdFNhbXBs
ZSByZWZlcmVuY2Ugd2l0aCB0aGlzIHJlbGVhc2UgZmxhZyBzbyB0aGF0CisgICAgICAgICAgICAg
ICAgLy8gdGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkIG9uY2UgdGhlIHJlbGVhc2UgZmxhZyBpcyBz
aWduYWxsZWQuIFRoZXJlJ3Mgd2F5cyB0byBhY2hpZXZlIHRoYXQsCisgICAgICAgICAgICAgICAg
Ly8gYnV0IGxlZnQgZm9yIGxhdGVyLgorICAgICAgICAgICAgICAgIG9iamVjdC5yZWxlYXNlRmxh
ZyA9IERNQUJ1ZlJlbGVhc2VGbGFnIHsgfTsKKworICAgICAgICAgICAgICAgIC8vIEZvciBlYWNo
IHBsYW5lLCB0aGUgcmVsZXZhbnQgZGF0YSAoc3RyaWRlLCBvZmZzZXQsIHNraXAsIGRtYWJ1ZiBm
ZCkgaXMgcmV0cmlldmVkIGFuZCBhc3NpZ25lZAorICAgICAgICAgICAgICAgIC8vIGFzIGFwcHJv
cHJpYXRlLiBNb2RpZmllciB2YWx1ZXMgYXJlIHplcm9lZCBvdXQgZm9yIG5vdywgc2luY2UgR1N0
cmVhbWVyIGRvZXNuJ3QgeWV0IHByb3ZpZGUKKyAgICAgICAgICAgICAgICAvLyB0aGUgaW5mb3Jt
YXRpb24uCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9iamVjdC5m
b3JtYXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0
ID0gR1NUX1ZJREVPX0lORk9fUExBTkVfT0ZGU0VUKCZ2aWRlb0luZm8sIGkpOworICAgICAgICAg
ICAgICAgICAgICBndWludCBtZW1pZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGd1aW50IGxl
bmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGdzaXplIHNraXAgPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeShidWZmZXIsIG9mZnNldCwgMSwg
Jm1lbWlkLCAmbGVuZ3RoLCAmc2tpcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8q
IG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVyLCBtZW1pZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QuZmRbaV0gPSBkdXBDbG9zZU9uRXhlYyhnc3RfZG1hYnVmX21l
bW9yeV9nZXRfZmQobWVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtZW0t
Pm9mZnNldCArIHNraXA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0LmZkW2ldID0gLTE7CisKKyAgICAgICAgICAgICAgICAgICAgZ2lu
dCBjb21wW0dTVF9WSURFT19NQVhfQ09NUE9ORU5UU107CisgICAgICAgICAgICAgICAgICAgIGdz
dF92aWRlb19mb3JtYXRfaW5mb19jb21wb25lbnQodmlkZW9JbmZvLmZpbmZvLCBpLCBjb21wKTsK
KyAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm9mZnNldFtpXSA9IG9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0LnN0cmlkZVtpXSA9IEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklE
RSgmdmlkZW9JbmZvLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1vZGlmaWVyW2ld
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhl
IGRlY29kZXIgaXMgZXhwb3J0aW5nIHJhdyBtZW1vcnksIHdlIGhhdmUgdG8gdXNlIHRoZSBzd2Fw
Y2hhaW4gdG8gYWxsb2NhdGUgYXBwcm9wcmlhdGUgYnVmZmVycworICAgIC8vIGFuZCBjb3B5IG92
ZXIgdGhlIGRhdGEgZm9yIGVhY2ggcGxhbmUuCisgICAgR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZm
ZXJEZXNjcmlwdGlvbiBidWZmZXJEZXNjcmlwdGlvbiB7CisgICAgICAgIERNQUJ1ZkZvcm1hdDo6
Y3JlYXRlKGZvdXJjY1ZhbHVlKEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKSkpLAor
ICAgICAgICBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKSwgR1NUX1ZJREVPX0lORk9f
SEVJR0hUKCZ2aWRlb0luZm8pLAorICAgIH07CisgICAgaWYgKGJ1ZmZlckRlc2NyaXB0aW9uLmZv
cm1hdC5mb3VyY2MgPT0gRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkludmFsaWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gc3dhcGNoYWluQnVmZmVyID0gbV9zd2FwY2hhaW4tPmdldEJ1ZmZl
cihidWZmZXJEZXNjcmlwdGlvbik7CisKKyAgICAvLyBTb3VyY2UgaGVscGVyIHN0cnVjdCwgbWFw
cyB0aGUgcmF3IG1lbW9yeSBhbmQgZXhwb3NlcyB0aGUgbWFwcGVkIGRhdGEgZm9yIGNvcHlpbmcu
CisgICAgc3RydWN0IFNvdXJjZSB7CisgICAgICAgIFNvdXJjZShHc3RNZW1vcnkqIG1lbW9yeSwg
Z3NpemUgb2Zmc2V0LCB1aW50MzJfdCBzdHJpZGUsIHVpbnQzMl90IGhlaWdodCkKKyAgICAgICAg
ICAgIDogbWVtb3J5KG1lbW9yeSkKKyAgICAgICAgICAgICwgc3RyaWRlKHN0cmlkZSkKKyAgICAg
ICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnc3Rf
bWVtb3J5X21hcChtZW1vcnksICZtYXBJbmZvLCBHU1RfTUFQX1JFQUQpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFsaWQgPSB0cnVlOworICAgICAgICAgICAgZGF0
YSA9ICZtYXBJbmZvLmRhdGFbb2Zmc2V0XTsKKyAgICAgICAgfQorCisgICAgICAgIH5Tb3VyY2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICAgICAgZ3N0
X21lbW9yeV91bm1hcChtZW1vcnksICZtYXBJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdmFsaWQgeyBmYWxzZSB9OworICAgICAgICBHc3RNZW1vcnkqIG1lbW9yeSB7IG51bGxwdHIg
fTsKKyAgICAgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgICAgICB1aW50OF90KiBkYXRhIHsg
bnVsbHB0ciB9OworICAgICAgICB1aW50MzJfdCBzdHJpZGUgeyAwIH07CisgICAgICAgIHVpbnQz
Ml90IGhlaWdodCB7IDAgfTsKKyAgICB9OworCisgICAgLy8gRGVzdGluYXRpb24gaGVscGVyIHN0
cnVjdCwgbWFwcyB0aGUgZ2JtX2JvIG9iamVjdCBpbnRvIENQVS1tZW1vcnkgc3BhY2UgYW5kIGNv
cGllcyBmcm9tIHRoZSBhY2NvbXBhbnlpbmcgU291cmNlIGluIGZpbGwoKS4KKyAgICBzdHJ1Y3Qg
RGVzdGluYXRpb24geworICAgICAgICBEZXN0aW5hdGlvbihzdHJ1Y3QgZ2JtX2JvKiBibywgdWlu
dDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKKyAgICAgICAgICAgIDogYm8oYm8pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1hcCA9IGdibV9ib19tYXAoYm8sIDAsIDAsIHdpZHRoLCBoZWln
aHQsIEdCTV9CT19UUkFOU0ZFUl9XUklURSwgJnN0cmlkZSwgJm1hcERhdGEpOworICAgICAgICAg
ICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB2YWxp
ZCA9IHRydWU7CisgICAgICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
bWFwKTsKKyAgICAgICAgfQorCisgICAgICAgIH5EZXN0aW5hdGlvbigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgICAgICBnYm1fYm9fdW5tYXAoYm8sIG1h
cERhdGEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWxsKGNvbnN0IFNvdXJjZSYgc291
cmNlKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IHkgPSAwOyB5IDwgc291
cmNlLmhlaWdodDsgKyt5KSB7CisgICAgICAgICAgICAgICAgYXV0byogc291cmNlRGF0YSA9ICZz
b3VyY2UuZGF0YVt5ICogc291cmNlLnN0cmlkZV07CisgICAgICAgICAgICAgICAgYXV0byogZGVz
dGluYXRpb25EYXRhID0gJmRhdGFbeSAqIHN0cmlkZV07CisgICAgICAgICAgICAgICAgbWVtY3B5
KGRlc3RpbmF0aW9uRGF0YSwgc291cmNlRGF0YSwgc3RkOjptaW4oc291cmNlLnN0cmlkZSwgc3Ry
aWRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHZhbGlkIHsg
ZmFsc2UgfTsKKyAgICAgICAgc3RydWN0IGdibV9ibyogYm8geyBudWxscHRyIH07CisgICAgICAg
IHZvaWQqIG1hcCB7IG51bGxwdHIgfTsKKyAgICAgICAgdm9pZCogbWFwRGF0YSB7IG51bGxwdHIg
fTsKKyAgICAgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKyAgICAgICAgdWludDMyX3Qg
c3RyaWRlIHsgMCB9OworICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1NU
X1ZJREVPX0lORk9fTl9QTEFORVMoJnZpZGVvSW5mbyk7ICsraSkgeworICAgICAgICBnaW50IGNv
bXBbR1NUX1ZJREVPX01BWF9DT01QT05FTlRTXTsKKyAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9p
bmZvX2NvbXBvbmVudCh2aWRlb0luZm8uZmluZm8sIGksIGNvbXApOworCisgICAgICAgIGF1dG8m
IHBsYW5lRGF0YSA9IHN3YXBjaGFpbkJ1ZmZlci0+cGxhbmVEYXRhKGkpOworICAgICAgICBnc2l6
ZSBvZmZzZXQgPSBHU1RfVklERU9fSU5GT19QTEFORV9PRkZTRVQoJnZpZGVvSW5mbywgaSk7Cisg
ICAgICAgIGd1aW50IHN0cmlkZSA9IEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklERSgmdmlkZW9J
bmZvLCBpKTsKKworICAgICAgICBndWludCBtZW1pZCwgbGVuZ3RoOworICAgICAgICBnc2l6ZSBz
a2lwOworICAgICAgICBpZiAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeShidWZmZXIsIG9mZnNldCwg
MSwgJm1lbWlkLCAmbGVuZ3RoLCAmc2tpcCkpIHsKKyAgICAgICAgICAgIGF1dG8qIG1lbSA9IGdz
dF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVyLCBtZW1pZCk7CisKKyAgICAgICAgICAgIFNvdXJj
ZSBzb3VyY2UobWVtLCBvZmZzZXQsIHN0cmlkZSwgcGxhbmVEYXRhLmhlaWdodCk7CisgICAgICAg
ICAgICBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbihwbGFuZURhdGEuYm8sIHBsYW5lRGF0YS53aWR0
aCwgcGxhbmVEYXRhLmhlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChzb3VyY2UudmFsaWQgJiYg
ZGVzdGluYXRpb24udmFsaWQpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZmlsbChzb3Vy
Y2UpOworICAgICAgICB9CisgICAgfQorCisgICAgKyttX3NhbXBsZUNvdW50OworICAgIExvY2tl
ciBsb2NrZXIgeyBwcm94eS5sb2NrKCkgfTsKKyAgICBpZiAoIXByb3h5LmlzQWN0aXZlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSB1cGRhdGVkIGJ1ZmZlciBpcyBwdXNoZWQgaW50
byB0aGUgY29tcG9zaXRpb24gc3RhZ2UuIFRoZSBETUFCdWZPYmplY3QgaGFuZGxlIHVzZXMgdGhl
IHN3YXBjaGFpbiBhZGRyZXNzIGFzIHRoZSBoYW5kbGUgYmFzZS4KKyAgICAvLyBXaGVuIHRoZSBi
dWZmZXIgaXMgcHVzaGVkIGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIGxhbWJkYSB3aWxsIGJlIGlu
dm9rZWQgdG8gcmV0cmlldmUgYSBtb3JlIGNvbXBsZXRlIERNQUJ1Zk9iamVjdCBmb3IgdGhlCisg
ICAgLy8gZ2l2ZW4gR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXIgb2JqZWN0LgorICAgIGRvd25j
YXN0PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY+KHByb3h5KS5wdXNoRE1B
QnVmKAorICAgICAgICBETUFCdWZPYmplY3QocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1f
c3dhcGNoYWluLmdldCgpKSArIHN3YXBjaGFpbkJ1ZmZlci0+aGFuZGxlKCkpLAorICAgICAgICBb
Jl0oYXV0byYmIG9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIHN3YXBjaGFpbkJ1ZmZlci0+
Y3JlYXRlRE1BQnVmT2JqZWN0KG9iamVjdC5oYW5kbGUpOworICAgICAgICB9KTsKK30KKyNlbmRp
ZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cmVwYWludCgpCiB7CiAgICAgQVNTRVJUKG1fc2FtcGxlKTsKQEAgLTMxODks
OCArMzQzOCwxNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dHJpZ2dlclJl
cGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUpCiAjZW5kaWYKICAgICAgICAgbV9kcmF3VGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd0xvY2sp
OwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhU
VVJFX01BUFBFUl9ETUFCVUYpCisgICAgICAgIGlmIChpczxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5RE1BQnVmPihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSkpIHsKKyAgICAgICAgICAg
IHB1c2hETUFCdWZUb0NvbXBvc2l0b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorI2VuZGlmCisKICAgICAgICAgcHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKTsKKyAgICB9CiAj
ZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogfQogCkBAIC0zNDMwLDYgKzM2ODcsMjMg
QEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojptb3ZpZUxvYWRUeXBlKCkgY29uc3QKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1vdmllTG9h
ZFR5cGU6OkRvd25sb2FkOwogfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0RNQUJVRikKK0dz
dEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rRE1B
QnVmKCkKK3sKKyAgICBpZiAoIXdlYktpdERNQUJ1ZlZpZGVvU2lua0lzRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXdlYktpdERNQUJ1ZlZpZGVvU2lua1Byb2Jl
UGxhdGZvcm0oKSkgeworICAgICAgICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBm
aW5kIHRoZSBETUFCdWYgdmlkZW8gc2luayBkZXBlbmRlbmNpZXMuIEhhcmR3YXJlLWFjY2VsZXJh
dGVkIHplcm8tY29weSB2aWRlbyByZW5kZXJpbmcgd29uJ3QgYmUgYWNoaWV2YWJsZSB3aXRoIHRo
aXMgcGx1Z2luLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHc3RF
bGVtZW50KiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJraXRkbWFidWZ2aWRl
b3NpbmsiLCBudWxscHRyKTsKKyAgICBBU1NFUlQoc2luayk7CisgICAgd2ViS2l0RE1BQnVmVmlk
ZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9ETUFCVUZfVklERU9fU0lOSyhzaW5r
KSwgdGhpcyk7CisgICAgcmV0dXJuIHNpbms7Cit9CisjZW5kaWYKKwogI2lmIFVTRShHU1RSRUFN
RVJfR0wpCiBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZp
ZGVvU2lua0dMKCkKIHsKQEAgLTM1MjEsOCArMzc5NSwxMiBAQCBHc3RFbGVtZW50KiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luaygpCiAgICAgcmV0dXJuIG1fdmlk
ZW9TaW5rLmdldCgpOwogI2VuZGlmCiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQor
ICAgIGlmICghbV92aWRlb1NpbmsgJiYgbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQorICAg
ICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0RNQUJ1ZigpOworI2VuZGlmCiAjaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAobV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQor
ICAgIGlmICghbV92aWRlb1NpbmsgJiYgbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQogICAg
ICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDU1ZjQxOTVlODZm
M2Y1ZGM2NjViMWZlZTUwZDc1MzRiMDdlNmYyOWIuLmYzY2E4YTMwMWM2NzNiYzM0ZjU0NDkyNTkx
NTQ5ZmI5YTU5ZGUxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmgKQEAgLTEwNSw2ICsxMDUsMTAgQEAgY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjsKIGNsYXNzIE1lZGlhUGxheWVyUmVxdWVzdEluc3RhbGxNaXNzaW5nUGx1Z2lu
c0NhbGxiYWNrOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI7CiAKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfRE1BQlVGKQorY2xhc3MgR0JNQnVmZmVyU3dhcGNoYWluOworI2VuZGlm
CisKIHZvaWQgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpOwogCiAvLyBVc2UgZWFn
ZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjb25zdHJ1
Y3QgV2Vha1B0cnMgb24gYW5vdGhlciB0aHJlYWQuCkBAIC0yNjcsNiArMjcxLDkgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgc2hvdWxkSWdub3JlSW50cmluc2ljU2l6ZSgpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KICNlbmRpZgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0RNQUJVRikKKyAgICBH
c3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmtETUFCdWYoKTsKKyNlbmRpZgogI2lmIFVTRShHU1RS
RUFNRVJfR0wpCiAgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rR0woKTsKICNlbmRpZgpA
QCAtMjgxLDYgKzI4OCwxMCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKICNlbmRpZgogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0RNQUJVRikKKyAgICB2b2lkIHB1c2hETUFCdWZUb0NvbXBvc2l0b3Io
KTsKKyNlbmRpZgorCiAgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rKCkgY29uc3QgeyByZXR1cm4g
bV92aWRlb1NpbmsuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChH
c3RTdHJlYW1Wb2x1bWUqKTsKQEAgLTUxMCw3ICs1MjEsNyBAQCBwcml2YXRlOgogICAgIFJ1bkxv
b3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9yZWFkeVRpbWVySGFuZGxl
cjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVm
PE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisgICAgUmVmUHRyPE5pY29z
aWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CiAjZWxzZQogICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNlbmRp
ZgpAQCAtNTc3LDYgKzU4OCwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQorICAgIFJlZlB0
cjxHQk1CdWZmZXJTd2FwY2hhaW4+IG1fc3dhcGNoYWluOworI2VuZGlmCiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsLmNwcAppbmRleCAwMjI4NDRiMzI2NzA0NTNjNmNjNzc1NTQ0YzI5NmI1ZDYw
ODNjNGU5Li4yOTUxNmMyNWI4NjQ2ODQzMWIwYWQ3MGY5MDE1MDA5Y2NiYTQ5OTIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbC5jcHAKQEAgLTM2LDEwICszNiwxNSBAQAogbmFtZXNwYWNlIE5pY29zaWEg
ewogCiBhdXRvIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KENs
aWVudCYgY2xpZW50KSAtPiBGYWN0b3J5Cit7CisgICAgcmV0dXJuIGNyZWF0ZUZhY3RvcnkoY2xp
ZW50LCBhZG9wdFJlZigqbmV3IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlHTCkpOworfQorCithdXRvIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVG
YWN0b3J5KENsaWVudCYgY2xpZW50LCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4mJiBwcm94eSkgLT4gRmFjdG9yeQogewogICAgIHJldHVybiBGYWN0b3J5KAot
ICAgICAgICBbJmNsaWVudF0oQ29udGVudExheWVyJikgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KGNsaWVudCwgYWRvcHRSZWYo
Km5ldyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0wpKTsKKyAgICAg
ICAgWyZjbGllbnQsIHByb3h5ID0gV1RGTW92ZShwcm94eSldKENvbnRlbnRMYXllciYpIG11dGFi
bGUgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KGNsaWVudCwgV1RGTW92ZShwcm94eSkpOwogICAgICAgICB9KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGwuaAppbmRleCA5N2UzMDU5MTNjYzg0MjZiMzdiODM3YzRkM2U2OWRhN2UzYjMw
NzZiLi41OTM2OTc1MDI1YmRiODQyYzQ5YmQzNzdkMzMwYjk2MTBiNDJhMjk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lh
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGwuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRp
YyBGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoQ2xpZW50Jik7CisgICAgc3RhdGljIEZhY3RvcnkgY3Jl
YXRlRmFjdG9yeShDbGllbnQmLCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4mJik7CiAKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bChDbGllbnQmLCBSZWY8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4m
Jik7CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMmU1MjZiY2M1MDIxY2I2ZjIwYTVhYWE1ZDMyY2IwOWE5MDhjNjE3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuY3BwCkBAIC0wLDAgKzEsMjg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYu
aCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
X0RNQUJVRikKKworI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg
PGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgor
I2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0MgY3JlYXRlSW1hZ2VLSFIoKQoreworICAg
IHN0YXRpYyBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0Mgc19jcmVhdGVJbWFnZUtIUjsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNfZmxhZywK
KyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfY3JlYXRlSW1hZ2VLSFIgPSByZWludGVycHJl
dF9jYXN0PFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImVnbENy
ZWF0ZUltYWdlS0hSIikpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gc19jcmVhdGVJbWFnZUtI
UjsKK30KKworc3RhdGljIFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0MgZGVzdHJveUltYWdlS0hS
KCkKK3sKKyAgICBzdGF0aWMgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQyBzX2Rlc3Ryb3lJbWFn
ZUtIUjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19mbGFnOworICAgIHN0ZDo6Y2FsbF9v
bmNlKHNfZmxhZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfZGVzdHJveUltYWdlS0hS
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZWdsRGVzdHJveUltYWdlS0hSIikpOworICAgICAgICB9KTsKKyAgICByZXR1cm4g
c19kZXN0cm95SW1hZ2VLSFI7Cit9CisKK3N0cnVjdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmOjpETUFCdWZMYXllcjo6RUdMSW1hZ2VEYXRhIHsKKyAgICBXVEZfTUFLRV9T
VFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICB+RUdMSW1hZ2VEYXRhKCkKKyAgICB7CisgICAg
ICAgIGlmIChudW1JbWFnZXMpIHsKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMobnVtSW1h
Z2VzLCB0ZXh0dXJlLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1JbWFnZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpbWFnZVtpXSAhPSBF
R0xfTk9fSU1BR0VfS0hSKQorICAgICAgICAgICAgICAgICAgICBkZXN0cm95SW1hZ2VLSFIoKShQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLmVnbERpc3BsYXko
KSwgaW1hZ2VbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdWlu
dDMyX3Qgd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgaGVpZ2h0IHsgMCB9OworICAgIHVuc2ln
bmVkIG51bUltYWdlcyB7IDAgfTsKKyAgICBzdGQ6OmFycmF5PEdMdWludCwgRE1BQnVmRm9ybWF0
OjpjX21heFBsYW5lcz4gdGV4dHVyZSB7IDAsIDAsIDAsIDAgfTsKKyAgICBzdGQ6OmFycmF5PEVH
TEltYWdlS0hSLCBETUFCdWZGb3JtYXQ6OmNfbWF4UGxhbmVzPiBpbWFnZSB7IEVHTF9OT19JTUFH
RV9LSFIsIEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9LSFIsIEVHTF9OT19JTUFHRV9L
SFIgfTsKK307CisKK1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKSA9IGRlZmF1bHQ7CitUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eURNQUJ1ZigpID0gZGVmYXVsdDsKKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmOjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY29t
cG9zaXRvciwgVGV4dHVyZU1hcHBlckxheWVyKiB0YXJnZXRMYXllcikKK3sKKyNpZm5kZWYgTkRF
QlVHCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUaHJlYWQpCisgICAgICAgIG1fY29tcG9zaXRvclRo
cmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKKyNlbmRpZgorICAgIEFTU0VSVChtX2NvbXBvc2l0
b3JUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY29tcG9zaXRvcik7
CisgICAgQVNTRVJUKHRhcmdldExheWVyKTsKKworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IG1fbG9jayB9OworICAgICAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOworICAgICAg
ICBtX3RhcmdldExheWVyID0gdGFyZ2V0TGF5ZXI7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OmludmFsaWRhdGUoKQoreworICAgIEFTU0VS
VChtX2NvbXBvc2l0b3JUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgbV9jb21wb3NpdG9yVGhyZWFkID0gbnVsbHB0cjsKKyNlbmRpZgorCisgICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OworCisgICAgbV9wZW5kaW5nTGF5ZXIgPSBudWxscHRyOwor
ICAgIG1fY29tbWl0dGVkTGF5ZXIgPSBudWxscHRyOworICAgIG1fbGF5ZXJzID0geyB9OworCisg
ICAgbV9jb21wb3NpdG9yID0gbnVsbHB0cjsKKyAgICBtX3RhcmdldExheWVyID0gbnVsbHB0cjsK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmOjpzd2FwQnVm
ZmVyKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgaWYgKCFtX3Rhcmdl
dExheWVyIHx8ICFtX3BlbmRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBw
cmV2aW91c0xheWVyID0gV1RGTW92ZShtX2NvbW1pdHRlZExheWVyKTsKKyAgICBtX2NvbW1pdHRl
ZExheWVyID0gV1RGTW92ZShtX3BlbmRpbmdMYXllcik7CisgICAgbV90YXJnZXRMYXllci0+c2V0
Q29udGVudHNMYXllcihtX2NvbW1pdHRlZExheWVyLmdldCgpKTsKKworICAgIC8vIFRoZSBwcmV2
aW91cyBhbmQganVzdC1jb21taXR0ZWQgbGF5ZXJzIHNob3VsZG4ndCBiZSB0aGUgc2FtZS4gQnV0
IGlmIHRoZXkgYXJlLCBkb24ndCBwZXJmb3JtIGEgcmVsZWFzZS4KKyAgICBBU1NFUlQoIXByZXZp
b3VzTGF5ZXIgfHwgcHJldmlvdXNMYXllciAhPSBtX2NvbW1pdHRlZExheWVyKTsKKyAgICBpZiAo
cHJldmlvdXNMYXllciAmJiBwcmV2aW91c0xheWVyICE9IG1fY29tbWl0dGVkTGF5ZXIpCisgICAg
ICAgIHByZXZpb3VzTGF5ZXItPnJlbGVhc2UoKTsKKworICAgIGlmICghbV9jb21taXR0ZWRMYXll
ci0+bV9pbWFnZURhdGEpCisgICAgICAgIG1fY29tbWl0dGVkTGF5ZXItPm1faW1hZ2VEYXRhID0g
RE1BQnVmTGF5ZXI6OmNyZWF0ZUVHTEltYWdlRGF0YShtX2NvbW1pdHRlZExheWVyLT5tX29iamVj
dCk7CisgICAgbV9jb21taXR0ZWRMYXllci0+bV9hZ2UgPSAwOworCisgICAgLy8gUmVtb3ZlIGFu
eSBzdGFsZSBsYXllcnMsIGUuZy4gaWYgYSBsYXllciBoYXMgZ29uZSB1bnVzZWQgZm9yID5jX21h
eGltdW1BZ2Ugc3dhcHMgb3IgZG9lc24ndCBtYXRjaCB0aGUgbGF0ZXN0IHNpemUuCisgICAgYXV0
byYgY29tbWl0dGVkT2JqZWN0ID0gbV9jb21taXR0ZWRMYXllci0+bV9vYmplY3Q7CisgICAgYXV0
byBpc1N0YWxlTGF5ZXIgPQorICAgICAgICBbJl0oYXV0byYgaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIGxheWVyID0gaXQudmFsdWUuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4g
bGF5ZXIubV9hZ2UgPiBETUFCdWZMYXllcjo6Y19tYXhpbXVtQWdlCisgICAgICAgICAgICAgICAg
fHwgIShsYXllci5tX29iamVjdC53aWR0aCA9PSBjb21taXR0ZWRPYmplY3Qud2lkdGggJiYgbGF5
ZXIubV9vYmplY3QuaGVpZ2h0ID09IGNvbW1pdHRlZE9iamVjdC5oZWlnaHQpOworICAgICAgICB9
OworCisgICAgYm9vbCBoYXNTdGFsZUxheWVycyA9IGZhbHNlOworICAgIGZvciAoYXV0byBpdCA9
IG1fbGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICsraXQtPnZhbHVlLT5tX2FnZTsKKyAgICAgICAgaGFzU3RhbGVMYXllcnMgfD0gaXNTdGFsZUxh
eWVyKCppdCk7CisgICAgfQorCisgICAgaWYgKGhhc1N0YWxlTGF5ZXJzKQorICAgICAgICBtX2xh
eWVycy5yZW1vdmVJZihpc1N0YWxlTGF5ZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHlETUFCdWY6OnB1c2hETUFCdWYoUmVmPERNQUJ1ZkxheWVyPiYmIGRtYWJ1
ZkxheWVyKQoreworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOworCisgICAgLy8gVGhlIHBl
bmRpbmcgYW5kIGp1c3QtcHVzaGVkIGxheWVycyBzaG91bGRuJ3QgYmUgdGhlIHNhbWUuIEJ1dCBp
ZiB0aGV5IGFyZSwgZG9uJ3QgcGVyZm9ybSBhIHJlbGVhc2UuCisgICAgQVNTRVJUKCFtX3BlbmRp
bmdMYXllciB8fCBtX3BlbmRpbmdMYXllciAhPSBkbWFidWZMYXllci5wdHIoKSk7CisgICAgaWYg
KG1fcGVuZGluZ0xheWVyICYmIG1fcGVuZGluZ0xheWVyICE9IGRtYWJ1ZkxheWVyLnB0cigpKQor
ICAgICAgICBtX3BlbmRpbmdMYXllci0+cmVsZWFzZSgpOworCisgICAgbV9wZW5kaW5nTGF5ZXIg
PSBXVEZNb3ZlKGRtYWJ1ZkxheWVyKTsKKyAgICBpZiAobV9jb21wb3NpdG9yKQorICAgICAgICBt
X2NvbXBvc2l0b3ItPm9uTmV3QnVmZmVyQXZhaWxhYmxlKCk7Cit9CisKK1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjpETUFCdWZMYXllcihETUFCdWZP
YmplY3QmJiBvYmplY3QsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX29i
amVjdChXVEZNb3ZlKG9iamVjdCkpCisgICAgLCBtX2ZsYWdzKGZsYWdzKQoreyB9CisKK1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRNQUJ1ZkxheWVyOjp+RE1BQnVmTGF5
ZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURN
QUJ1Zjo6RE1BQnVmTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAo
IW1faW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiB0aGlzIGlzIHRo
ZSBCVC42MDEgY29sb3JzcGFjZSBjb252ZXJzaW9uIG1hdHJpeC4gVGhlIGV4YWN0IGRlc2lyZWQg
Y29sb3JzcGFjZSBzaG91bGQgYmUgaW5jbHVkZWQKKyAgICAvLyBpbiB0aGUgRE1BQnVmT2JqZWN0
LCBhbmQgdGhlIHJlbGV2YW50IG1hdHJpeCBkZWNpZGVkIGJhc2VkIG9uIGl0LiBCVC42MDEgc2hv
dWxkIHJlbWFpbiB0aGUgZGVmYXVsdC4KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8
R0xmbG9hdCwgOT4gc195dXZUb1JHQiB7CisgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNTk2
ZiwKKyAgICAgICAgMS4xNjRmLCAtMC4zOTFmLCAtMC44MTNmLAorICAgICAgICAxLjE2NGYsICAy
LjAxOGYsICAwLjBmCisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJHTCYgdGV4bWFwR0wgPSBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKTsKKyAgICBhdXRvJiBk
YXRhID0gKm1faW1hZ2VEYXRhOworCisgICAgc3dpdGNoIChtX29iamVjdC5mb3JtYXQuZm91cmNj
KSB7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJHQjg4ODg6CisgICAgY2FzZSBE
TUFCdWZGb3JtYXQ6OkZvdXJDQzo6WEJHUjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZv
dXJDQzo6QVJHQjg4ODg6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QUJHUjg4ODg6
CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlKGRhdGEudGV4dHVyZVswXSwgbV9mbGFncywg
SW50U2l6ZShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgb3BhY2l0eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpG
b3VyQ0M6Okk0MjA6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WTQ0NDoKKyAgICBj
YXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpZNDFCOgorICAgIGNhc2UgRE1BQnVmRm9ybWF0OjpG
b3VyQ0M6Olk0MkI6CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlUGxhbmFyWVVWKHN0ZDo6
YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4dHVyZVswXSwgZGF0YS50ZXh0dXJlWzFdLCBkYXRh
LnRleHR1cmVbMl0gfSwKKyAgICAgICAgICAgIHNfeXV2VG9SR0IsIG1fZmxhZ3MsIEludFNpemUo
ZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9w
YWNpdHksIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRE1BQnVmRm9y
bWF0OjpGb3VyQ0M6OllWMTI6CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlUGxhbmFyWVVW
KHN0ZDo6YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4dHVyZVswXSwgZGF0YS50ZXh0dXJlWzJd
LCBkYXRhLnRleHR1cmVbMV0gfSwKKyAgICAgICAgICAgIHNfeXV2VG9SR0IsIG1fZmxhZ3MsIElu
dFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIG9wYWNpdHksIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OkE0MjA6CisgICAgICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlUGxh
bmFyWVVWKHN0ZDo6YXJyYXk8R0x1aW50LCAzPiB7IGRhdGEudGV4dHVyZVswXSwgZGF0YS50ZXh0
dXJlWzFdLCBkYXRhLnRleHR1cmVbMl0gfSwKKyAgICAgICAgICAgIHNfeXV2VG9SR0IsIG1fZmxh
Z3MsIEludFNpemUoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLCB0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIG9wYWNpdHksIGRhdGEudGV4dHVyZVszXSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRE1BQnVmRm9ybWF0OjpGb3VyQ0M6Ok5WMTI6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6TlYyMToKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmVTZW1pUGxhbmFyWVVW
KHN0ZDo6YXJyYXk8R0x1aW50LCAyPiB7IGRhdGEudGV4dHVyZVswXSwgZGF0YS50ZXh0dXJlWzFd
IH0sCisgICAgICAgICAgICAobV9vYmplY3QuZm9ybWF0LmZvdXJjYyA9PSBETUFCdWZGb3JtYXQ6
OkZvdXJDQzo6TlYyMSksCisgICAgICAgICAgICBzX3l1dlRvUkdCLCBtX2ZsYWdzLCBJbnRTaXpl
KGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBv
cGFjaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVVZMjoKKyAgICBjYXNlIERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpVWVZZOgorICAgIGNhc2UgRE1B
QnVmRm9ybWF0OjpGb3VyQ0M6OlZVWUE6CisgICAgY2FzZSBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
WVZZVToKKyAgICAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmVQYWNrZWRZVVYoZGF0YS50ZXh0dXJl
WzBdLAorICAgICAgICAgICAgc195dXZUb1JHQiwgbV9mbGFncywgSW50U2l6ZShkYXRhLndpZHRo
LCBkYXRhLmhlaWdodCksIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWY6OkRN
QUJ1ZkxheWVyOjpFR0xJbWFnZURhdGE+IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlE
TUFCdWY6OkRNQUJ1ZkxheWVyOjpjcmVhdGVFR0xJbWFnZURhdGEoRE1BQnVmT2JqZWN0JiBvYmpl
Y3QpCit7CisgICAgdXNpbmcgRUdMSW1hZ2VEYXRhID0gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eURNQUJ1Zjo6RE1BQnVmTGF5ZXI6OkVHTEltYWdlRGF0YTsKKworICAgIEVHTERpc3Bs
YXkgZWdsRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCkuZWdsRGlzcGxheSgpOworCisgICAgRUdMSW1hZ2VLSFIgaW1hZ2VbRE1BQnVmRm9ybWF0
OjpjX21heFBsYW5lc107CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9iamVjdC5mb3Jt
YXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PEVHTGlu
dD4gYXR0cmlidXRlcyB7CisgICAgICAgICAgICBFR0xfV0lEVEgsIEVHTGludChvYmplY3QuZm9y
bWF0LnBsYW5lV2lkdGgoaSwgb2JqZWN0LndpZHRoKSksCisgICAgICAgICAgICBFR0xfSEVJR0hU
LCBFR0xpbnQob2JqZWN0LmZvcm1hdC5wbGFuZUhlaWdodChpLCBvYmplY3QuaGVpZ2h0KSksCisg
ICAgICAgICAgICBFR0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQsIEVHTGludChvYmplY3QuZm9ybWF0
LnBsYW5lc1tpXS5mb3VyY2MpLAorICAgICAgICAgICAgRUdMX0RNQV9CVUZfUExBTkUwX0ZEX0VY
VCwgb2JqZWN0LmZkW2ldLAorICAgICAgICAgICAgRUdMX0RNQV9CVUZfUExBTkUwX09GRlNFVF9F
WFQsIEVHTGludChvYmplY3Qub2Zmc2V0W2ldKSwKKyAgICAgICAgICAgIEVHTF9ETUFfQlVGX1BM
QU5FMF9QSVRDSF9FWFQsIEVHTGludChvYmplY3Quc3RyaWRlW2ldKSwKKyAgICAgICAgICAgIEVH
TF9OT05FLAorICAgICAgICB9OworICAgICAgICBpbWFnZVtpXSA9IGNyZWF0ZUltYWdlS0hSKCko
ZWdsRGlzcGxheSwgRUdMX05PX0NPTlRFWFQsIEVHTF9MSU5VWF9ETUFfQlVGX0VYVCwgbnVsbHB0
ciwgc3RkOjpkYXRhKGF0dHJpYnV0ZXMpKTsKKyAgICB9CisKKyAgICBhdXRvIGltYWdlRGF0YSA9
IG1ha2VVbmlxdWU8RUdMSW1hZ2VEYXRhPigpOworICAgIGF1dG8mIGRhdGEgPSAqaW1hZ2VEYXRh
OworICAgIGRhdGEud2lkdGggPSBvYmplY3Qud2lkdGg7CisgICAgZGF0YS5oZWlnaHQgPSBvYmpl
Y3QuaGVpZ2h0OworICAgIGRhdGEubnVtSW1hZ2VzID0gb2JqZWN0LmZvcm1hdC5udW1QbGFuZXM7
CisgICAgZ2xHZW5UZXh0dXJlcyhkYXRhLm51bUltYWdlcywgZGF0YS50ZXh0dXJlLmRhdGEoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubnVtSW1hZ2VzOyArK2kpIHsKKyAg
ICAgICAgZGF0YS5pbWFnZVtpXSA9IGltYWdlW2ldOworCisgICAgICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgZGF0YS50ZXh0dXJlW2ldKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyhHTF9URVhUVVJFXzJELCBkYXRhLmlt
YWdlW2ldKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9
CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShURVhUVVJFX01BUFBF
Ul9ETUFCVUYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eURNQUJ1Zi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHlETUFCdWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDcyMTBjYmZlYzE5NDBmYWZkODgyOTNlNmQwMGNk
NzhhNTcwZTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYuaApAQCAt
MCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5o
IgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJf
RE1BQlVGKQorCisjaW5jbHVkZSAiRE1BQnVmRm9ybWF0LmgiCisjaW5jbHVkZSAiRE1BQnVmT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5RE1BQnVmIGZpbmFsIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFCdWYoKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVmKCk7CisKKyAgICBib29sIGlzRE1BQnVmQmFz
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFjdGl2YXRlT25Db21wb3NpdGluZ1RocmVhZChDb21wb3NpdG9yKiwgVGV4dHVyZU1h
cHBlckxheWVyKikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRl
KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2FwQnVmZmVyKCkgb3ZlcnJp
ZGU7CisKKyAgICBjbGFzcyBETUFCdWZMYXllciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxETUFCdWZMYXllcj4sIHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgRE1BQnVm
TGF5ZXIoRE1BQnVmT2JqZWN0JiYsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgPSAwKTsKKyAgICAg
ICAgdmlydHVhbCB+RE1BQnVmTGF5ZXIoKTsKKworICAgICAgICB2b2lkIHBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0geyB9LCBmbG9hdCBvcGFjaXR5ID0gMS4wKSBm
aW5hbDsKKworICAgICAgICB2b2lkIHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBt
X29iamVjdC5yZWxlYXNlRmxhZy5yZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1B
QnVmOworCisgICAgICAgIHN0cnVjdCBFR0xJbWFnZURhdGE7CisgICAgICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8RUdMSW1hZ2VEYXRhPiBjcmVhdGVFR0xJbWFnZURhdGEoRE1BQnVmT2JqZWN0
Jik7CisKKyAgICAgICAgRE1BQnVmT2JqZWN0IG1fb2JqZWN0OworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RUdMSW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdM
OjpGbGFncyBtX2ZsYWdzOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY19t
YXhpbXVtQWdlIHsgMTYgfTsKKyAgICAgICAgdW5zaWduZWQgbV9hZ2UgeyAwIH07CisgICAgfTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgICAgdm9pZCBwdXNoRE1BQnVmKERNQUJ1Zk9i
amVjdCYmIGRtYWJ1Zk9iamVjdCwgY29uc3QgRiYgY29uc3RydWN0b3IsIFRleHR1cmVNYXBwZXJH
TDo6RmxhZ3MgZmxhZ3MgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQo
KSk7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2xheWVycy5lbnN1cmUoZG1hYnVmT2JqZWN0
LmhhbmRsZSwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRE1BQnVmTGF5ZXIoY29uc3RydWN0b3IoV1RGTW92ZShkbWFidWZPYmplY3QpKSwg
ZmxhZ3MpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBwdXNoRE1BQnVmKHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuY29weVJlZigpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdXNo
RE1BQnVmKFJlZjxETUFCdWZMYXllcj4mJik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgUmVmUHRy
PFRocmVhZD4gbV9jb21wb3NpdG9yVGhyZWFkOworI2VuZGlmCisKKyAgICB1c2luZyBMYXllck1h
cCA9IEhhc2hNYXA8dWludHB0cl90LCBSZWY8RE1BQnVmTGF5ZXI+LCBXVEY6OkRlZmF1bHRIYXNo
PHVpbnRwdHJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludHB0cl90
Pj47CisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisKKyAgICBSZWZQdHI8RE1BQnVmTGF5ZXI+IG1f
cGVuZGluZ0xheWVyOworICAgIFJlZlB0cjxETUFCdWZMYXllcj4gbV9jb21taXR0ZWRMYXllcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19U
RVhUVVJFTUFQUEVSX1BMQVRGT1JNTEFZRVJQUk9YWShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5RE1BQnVmLCBpc0RNQUJ1ZkJhc2VkKCkpOworCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>