<?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>225088</bug_id>
          
          <creation_ts>2021-04-26 22:20:46 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters 7/23] Refactor the FilterEffect result buffers into a new class named &apos;FilterImage&apos;</short_desc>
          <delta_ts>2021-11-29 21:32:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1754492</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-26 22:20:46 -0700</bug_when>
    <thetext>This moves all the conversion from ImageBuffer to the unpremultiplied/premultiplied ImageData and vice versa from FilterEffect to FilterImage. This will help with the following:

1. Simplifying the FilterEffect geometry calculation and give the ability to save memory
2. Integrate CoreImage in FilterImage and give the ability to deal with non CoreImage filters seamlessly through FilterImage.
3. Prepare for applying the FilterEffects in GPUP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754493</commentid>
    <comment_count>1</comment_count>
      <attachid>427120</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-26 22:22:59 -0700</bug_when>
    <thetext>Created attachment 427120
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754496</commentid>
    <comment_count>2</comment_count>
      <attachid>427121</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-26 22:33:30 -0700</bug_when>
    <thetext>Created attachment 427121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754505</commentid>
    <comment_count>3</comment_count>
      <attachid>427123</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-26 23:24:30 -0700</bug_when>
    <thetext>Created attachment 427123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754765</commentid>
    <comment_count>4</comment_count>
      <attachid>427188</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-27 13:31:23 -0700</bug_when>
    <thetext>Created attachment 427188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754780</commentid>
    <comment_count>5</comment_count>
      <attachid>427193</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-27 14:00:51 -0700</bug_when>
    <thetext>Created attachment 427193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754892</commentid>
    <comment_count>6</comment_count>
      <attachid>427229</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-27 19:56:36 -0700</bug_when>
    <thetext>Created attachment 427229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754935</commentid>
    <comment_count>7</comment_count>
      <attachid>427241</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-27 23:56:06 -0700</bug_when>
    <thetext>Created attachment 427241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755149</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-28 13:34:28 -0700</bug_when>
    <thetext>I can&apos;t quite tell what a FilterResult is supposed to represent? From the name, it sounds like it is the result of a filter effect graph. Is that correct? Is FilterEffect the only class that creates these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755459</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-04-29 10:53:00 -0700</bug_when>
    <thetext>
(In reply to Sam Weinig from comment #8)
&gt; I can&apos;t quite tell what a FilterResult is supposed to represent? From the
&gt; name, it sounds like it is the result of a filter effect graph. Is that
&gt; correct?

Yes it is the result of applying a FilterEffect to its input effects. It caches different formats for the result: image buffer, premultiplied image data and unpremultiplied image data. It facilitates the conversion from a format to another.

&gt; Is FilterEffect the only class that creates these?

Yes currently FilterEffect is the only class that creates it. But my plan is to make FilterEffectRendererCoreImage use it also by including a fourth format of type CIImage.

FilterEffect calculates the geometry and handles the result. This patch is trying to simplify this class by moving the result into an new class. So it will be responsible for calculating the geometry only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756442</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-03 22:21:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/77487760&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757758</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 18:00:05 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #9)
&gt; (In reply to Sam Weinig from comment #8)
&gt; &gt; Is FilterEffect the only class that creates these?
&gt; 
&gt; Yes currently FilterEffect is the only class that creates it. 

Ok. I think we should then make it only constructible by FilterEffect by making the create functions private and friending them to FilterEffect. 

It might also be reasonable to make this a nested class inside FilterEffect, something like FilterEffect::Result, but that is more a style opinion than anything too critical.

It seems a bit odd that a result type has functions that can mutate it like correctPremultipliedImageData() and transformToColorSpace().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810995</commentid>
    <comment_count>12</comment_count>
      <attachid>443047</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-01 18:12:16 -0700</bug_when>
    <thetext>Created attachment 443047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811058</commentid>
    <comment_count>13</comment_count>
      <attachid>443067</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-02 01:31:48 -0700</bug_when>
    <thetext>Created attachment 443067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811069</commentid>
    <comment_count>14</comment_count>
      <attachid>443072</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-02 02:00:21 -0700</bug_when>
    <thetext>Created attachment 443072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811073</commentid>
    <comment_count>15</comment_count>
      <attachid>443073</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-02 02:16:16 -0700</bug_when>
    <thetext>Created attachment 443073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811076</commentid>
    <comment_count>16</comment_count>
      <attachid>443074</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-02 02:41:15 -0700</bug_when>
    <thetext>Created attachment 443074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811077</commentid>
    <comment_count>17</comment_count>
      <attachid>443075</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-02 02:53:35 -0700</bug_when>
    <thetext>Created attachment 443075
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814122</commentid>
    <comment_count>18</comment_count>
      <attachid>443976</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-11 11:07:00 -0800</bug_when>
    <thetext>Created attachment 443976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814180</commentid>
    <comment_count>19</comment_count>
      <attachid>443993</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-11 13:05:43 -0800</bug_when>
    <thetext>Created attachment 443993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814184</commentid>
    <comment_count>20</comment_count>
      <attachid>443995</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-11 13:19:34 -0800</bug_when>
    <thetext>Created attachment 443995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814954</commentid>
    <comment_count>21</comment_count>
      <attachid>444211</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-14 22:38:19 -0800</bug_when>
    <thetext>Created attachment 444211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815557</commentid>
    <comment_count>22</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-16 10:35:09 -0800</bug_when>
    <thetext>Please notice this renaming in the latest patch


    Old                                             New                                     
---------------------------------------------------------------------------------------------
FilterEffect::createImageBufferResult()         -&gt; FilterEffect::imageBufferResult()

FilterEffect::createPremultipliedImageResult    -&gt; FilterEffect::premultipliedResult()
FilterEffect::premultipliedResult()             -&gt; FilterEffect::getPremultipliedResult()
FilterEffect::copyPremultipliedResult()         -&gt; FilterEffect::copyPremultipliedResult() // No change

FilterEffect::createUnmultipliedImageResult     -&gt; FilterEffect::unpremultipliedResult()
FilterEffect::unmultipliedResult()              -&gt; FilterEffect::getUnpremultipliedResult()
FilterEffect::copyUnmultipliedResult()          -&gt; FilterEffect::copyUnpremultipliedResult()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815906</commentid>
    <comment_count>23</comment_count>
      <attachid>444211</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-17 06:12:02 -0800</bug_when>
    <thetext>Comment on attachment 444211
Patch

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

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:50
&gt; +    PixelBuffer* unpremultipliedResult();

It&apos;s not entirely clear to me why in every other place we pass AlphaPremultiplication, but then in this file, we have specific method per alpha premultiplication strategy.

So to untrained eye it&apos;d be more consistent and less entry points to have :
    PixelBuffer* FilterEffect::pixelBufferResult(AlphaPremultiplication)

Similar observation for the other functions below

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:77
&gt; +#if USE(ACCELERATE)

I think these functions might already be available in PixelBufferConversion.h

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:113
&gt; +    size_t rowBytes = inputSize.width() * 4;

Maybe in PixelBufferConversion.h

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:249
&gt; +        yEnd = logicalSize.height();

Could the above complexity be handled with abstraction of:
- copiedRect = logicalRect intersect rect
- if copiedRect is empty, return
- copy copiedRect

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:265
&gt; +std::optional&lt;PixelBuffer&gt; FilterImage::getConvertedPixelBuffer(ImageBuffer&amp; imageBuffer, AlphaPremultiplication alphaFormat, const IntRect&amp; rect, DestinationColorSpace colorSpace) const

this could be a .cpp local static function

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:268
&gt; +    // Create an ImageBuffer with the correct color space and utilize CG to handle color space conversion

This comment is probably a bit redunant..

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:269
&gt; +    auto convertedImageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Unaccelerated, 1, colorSpace, PixelFormat::BGRA8);

I think the drawImageBuffer should still be accelerated, so here you probably could use &quot;createCompatibleBuffer&quot; ?

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:283
&gt; +    // Create an ImageBuffer to store incoming PixelBuffer

This comment is probably a bit redunant..

&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:284
&gt; +    auto imageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Unaccelerated, 1, m_colorSpace, PixelFormat::BGRA8);

here use of m_colorspace is a bit strange, it&apos;s unclear if it&apos;s the same as the incoming pixel buffer color space.
Should the color space come from the incoming PixelBufferConversion?
If so, this function can be .cpp local static function.

&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:48
&gt; +    RefPtr&lt;ImageBuffer&gt;&amp; imageBufferIfExists() { return m_imageBuffer; }

This is not used as a slot, so this could be just RefPtr&lt;ImageBuffer&gt;, no reference.
(Giving out references to member variables is same as making the members public.)

This function could be private?

&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:51
&gt; +    std::optional&lt;PixelBuffer&gt;&amp; pixelBufferIfExists(AlphaPremultiplication);

This function gives out member variable as a public.
This should be a private function.

The use of this function is primarily not to get the pixel buffer if it exists. It is to get the slot to which to write the pixel buffer being copied. So maybe it would be more obvious if it was renamed to something else.
    pixelBufferSlot(AlphaPremultiplication) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817048</commentid>
    <comment_count>24</comment_count>
      <attachid>444871</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-19 17:03:59 -0800</bug_when>
    <thetext>Created attachment 444871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817106</commentid>
    <comment_count>25</comment_count>
      <attachid>444892</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-20 03:10:16 -0800</bug_when>
    <thetext>Created attachment 444892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817108</commentid>
    <comment_count>26</comment_count>
      <attachid>444893</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-20 03:42:25 -0800</bug_when>
    <thetext>Created attachment 444893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817129</commentid>
    <comment_count>27</comment_count>
      <attachid>444902</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-20 11:29:36 -0800</bug_when>
    <thetext>Created attachment 444902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817166</commentid>
    <comment_count>28</comment_count>
      <attachid>444211</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-20 20:20:38 -0800</bug_when>
    <thetext>Comment on attachment 444211
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:50
&gt;&gt; +    PixelBuffer* unpremultipliedResult();
&gt; 
&gt; It&apos;s not entirely clear to me why in every other place we pass AlphaPremultiplication, but then in this file, we have specific method per alpha premultiplication strategy.
&gt; 
&gt; So to untrained eye it&apos;d be more consistent and less entry points to have :
&gt;     PixelBuffer* FilterEffect::pixelBufferResult(AlphaPremultiplication)
&gt; 
&gt; Similar observation for the other functions below

Fixed. Three functions were added for PixelBuffer queries:

    PixelBuffer* pixelBufferResult(AlphaPremultiplication);
    std::optional&lt;PixelBuffer&gt; getPixelBufferResult(AlphaPremultiplication, const IntRect&amp; sourceRect, std::optional&lt;DestinationColorSpace&gt; = std::nullopt);
    void copyPixelBufferResult(PixelBuffer&amp; destinationPixelBuffer, const IntRect&amp; sourceRect) const;

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:77
&gt;&gt; +#if USE(ACCELERATE)
&gt; 
&gt; I think these functions might already be available in PixelBufferConversion.h

Yes they are. Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:113
&gt;&gt; +    size_t rowBytes = inputSize.width() * 4;
&gt; 
&gt; Maybe in PixelBufferConversion.h

Yes it is. Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:249
&gt;&gt; +        yEnd = logicalSize.height();
&gt; 
&gt; Could the above complexity be handled with abstraction of:
&gt; - copiedRect = logicalRect intersect rect
&gt; - if copiedRect is empty, return
&gt; - copy copiedRect

Yes the clipped source rectangle can be calculated this way. But we need we need also to calculate the destination rectangle.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:265
&gt;&gt; +std::optional&lt;PixelBuffer&gt; FilterImage::getConvertedPixelBuffer(ImageBuffer&amp; imageBuffer, AlphaPremultiplication alphaFormat, const IntRect&amp; rect, DestinationColorSpace colorSpace) const
&gt; 
&gt; this could be a .cpp local static function

Yes it can be static. Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:268
&gt;&gt; +    // Create an ImageBuffer with the correct color space and utilize CG to handle color space conversion
&gt; 
&gt; This comment is probably a bit redunant..

The comment was removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:269
&gt;&gt; +    auto convertedImageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Unaccelerated, 1, colorSpace, PixelFormat::BGRA8);
&gt; 
&gt; I think the drawImageBuffer should still be accelerated, so here you probably could use &quot;createCompatibleBuffer&quot; ?

We have never used accelerated ImageBuffers for software filters. CoreImages have to use IOSurfaces. So FilterImage will be extended in future patches to handle the CoreImage case as well.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:283
&gt;&gt; +    // Create an ImageBuffer to store incoming PixelBuffer
&gt; 
&gt; This comment is probably a bit redunant..

This comment was removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.cpp:284
&gt;&gt; +    auto imageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Unaccelerated, 1, m_colorSpace, PixelFormat::BGRA8);
&gt; 
&gt; here use of m_colorspace is a bit strange, it&apos;s unclear if it&apos;s the same as the incoming pixel buffer color space.
&gt; Should the color space come from the incoming PixelBufferConversion?
&gt; If so, this function can be .cpp local static function.

The function was made static and the colorSpace of the sourcePixelBuffer is now used to create the ImageBuffer.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:48
&gt;&gt; +    RefPtr&lt;ImageBuffer&gt;&amp; imageBufferIfExists() { return m_imageBuffer; }
&gt; 
&gt; This is not used as a slot, so this could be just RefPtr&lt;ImageBuffer&gt;, no reference.
&gt; (Giving out references to member variables is same as making the members public.)
&gt; 
&gt; This function could be private?

Yes it can be private. Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:51
&gt;&gt; +    std::optional&lt;PixelBuffer&gt;&amp; pixelBufferIfExists(AlphaPremultiplication);
&gt; 
&gt; This function gives out member variable as a public.
&gt; This should be a private function.
&gt; 
&gt; The use of this function is primarily not to get the pixel buffer if it exists. It is to get the slot to which to write the pixel buffer being copied. So maybe it would be more obvious if it was renamed to something else.
&gt;     pixelBufferSlot(AlphaPremultiplication) ?

The function is renamed to pixelBufferSlot() and it was made private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817381</commentid>
    <comment_count>29</comment_count>
      <attachid>444902</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-22 20:21:07 -0800</bug_when>
    <thetext>Comment on attachment 444902
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        from FilterImage will make this creation happens.

&quot;make this creation happen&quot;

&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:55
&gt; +    void transformToColorSpace(DestinationColorSpace);

The patch has a few functions that take a DestinationColorSpace and some take a const reference and other pass by value. We should be consistent.

&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:60
&gt; +    RefPtr&lt;ImageBuffer&gt;&amp; imageBufferSlot() { return m_imageBuffer; }

Is it necessary to have a function for this, rather than having the callers just refer to m_imageBuffer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817409</commentid>
    <comment_count>30</comment_count>
      <attachid>445012</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 00:33:21 -0800</bug_when>
    <thetext>Created attachment 445012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817412</commentid>
    <comment_count>31</comment_count>
      <attachid>444902</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 00:51:06 -0800</bug_when>
    <thetext>Comment on attachment 444902
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:55
&gt;&gt; +    void transformToColorSpace(DestinationColorSpace);
&gt; 
&gt; The patch has a few functions that take a DestinationColorSpace and some take a const reference and other pass by value. We should be consistent.

This function will take a const reference to DestinationColorSpace.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterImage.h:60
&gt;&gt; +    RefPtr&lt;ImageBuffer&gt;&amp; imageBufferSlot() { return m_imageBuffer; }
&gt; 
&gt; Is it necessary to have a function for this, rather than having the callers just refer to m_imageBuffer?

This function is deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817421</commentid>
    <comment_count>32</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-23 01:22:24 -0800</bug_when>
    <thetext>Committed r286129 (244516@main): &lt;https://commits.webkit.org/244516@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445012.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427120</attachid>
            <date>2021-04-26 22:22:59 -0700</date>
            <delta_ts>2021-04-26 22:38:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210426222258.patch</filename>
            <type>text/plain</type>
            <size>53858</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmOGIwOWZhMTdjM2Fl
YzhhYTE2NWRkZDNkZWJlMGQ5NTI0MTQ2Yy4uZTA5MzUyOTEzOTY3MDU4OThiZmI5MDA0ZThmMzMx
ZjRiZjYzMTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTA0LTI2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
SW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdl
Qnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5
aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZURhdGFUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckltYWdlOjppbWFnZURhdGFJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6aW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpn
ZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzSW1h
Z2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmNvcHlJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9y
bVRvQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAyMS0wNC0yNiAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW1dlYklE
TF0gUmVtb3ZlIFtDYWxsTmFtZWRTZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc10gZXh0
ZW5kZWQgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBiNDhjMTFkM2EyZmQ3OGYxY2M4OTgw
NjNhZjMyNzVlODJkNDYzOTMuLjhiZmEyNjJhMzYxYmU4YjJjNmVlNzUxNWQ1OTM1YzZhYWYzMzRl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDU2LDYgKzIwNTYsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU5NTE0YjU5NjJhOGMzZjgyNTBmN2JlMTkxOWJmMjJmMjUwNzcwZjQuLjNkMjE0
YjU5ZDI2NDg3YmU0Y2MxNDUyZGYxZGQ2MzlmMmRjZTZhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkz
LDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDkzNCw2ICsyNDkzNiw4IEBACiAJCQkJMDhD
OTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4
MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4
NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJ
NzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MkM5
MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApp
bmRleCA0ZDIyOGY5MDViMjBmYjkxM2FkZGZiZGJkMjk4OTliNDg4MWY2ZGE5Li44NTJkODgyZjQ3
NGRlNDAxY2FhMzMwMDA2Yzk3M2M0NmRhZWVkYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtODcs
MTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwg
MjU1LCAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFl
MmY3NmFlYTBjMy4uMGJjM2UyNjdhYTk2MjAxNTA4MDIyZDA5YTY3YmQyMmExOThjZTdiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaApAQCAtNTgsMTUgKzU4LDExIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNv
bnN0IHsgcmV0dXJuIG1fazQ7IH0KICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVk
OgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7
IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBw
cml2YXRlOgogICAgIEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKICAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQogCi0gICAg
dm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1
MTM1MjFlYTRjYTViYTkwNGYyZDYwNWRmOTlhNDRhMDQuLmJkZmM1YzgxZmMxNTM4NGY1MzM0ZmQw
YTU0MmM1ZDljOGFjYzdkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTE4Niw2OSArMTg3LDEzIEBAIHZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
IHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlw
bGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCk7Ci0gICAgfQotICAgIAogICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBm
dW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7
IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVWludDhDbGFt
cGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
OwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKLSAgICBpbnQg
cGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVz
dCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNT
RVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90
KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0g
ICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0
YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4
KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAg
ICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxE
YXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0g
ICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5
TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51
bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVh
Y2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBp
ZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBB
bHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBp
eGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwg
YW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAg
ICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7
Ci0gICAgfQotfQotCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewotICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBtX2ltYWdlUmVzdWx0ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCkBAIC0yNjUsMjgzICsyMTAsMjkgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFn
ZVJlc3VsdC0+aW1hZ2VCdWZmZXIoKSA6IG51bGxwdHI7CiB9CiAKIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYg
cmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAg
IEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICByZXR1cm4gbV9pbWFnZVJlc3VsdCA/IG1f
aW1hZ2VSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0KIAogUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQog
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkg
KiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNv
bG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0g
ICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRy
YW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxl
ZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlv
bi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVy
biBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlm
IChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2Nh
bGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkg
Pj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
eE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhP
cmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4g
PSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4
RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAg
aW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAt
eU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2Nh
bGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6
ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0g
c2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRl
c3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAg
ICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4
ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0
aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsK
LSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRp
cGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQg
PSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5k
KSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsw
XSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBh
bHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAg
ICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9
IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VEYXRh
JiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkpOwot
ICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9y
ZSBpbmNvbWluZyBJbWFnZURhdGEKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5wdXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1
ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJl
Y3QsIG91dHB1dEZvcm1hdCk7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJn
ZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2Ug
YW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JT
cGFjZSk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4g
ZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdl
RGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwK
LSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAg
ICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSwgaW1hZ2VEYXRhLCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVk
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRl
ZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIHJldHVybiBt
X2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0K
IAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbCht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkp
OwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRh
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1
dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVz
dGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9pbWFnZVJlc3VsdC0+Y29weUltYWdl
RGF0YShkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewog
ICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
ewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlm
ICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0
U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBt
X2ltYWdlUmVzdWx0LT5jb3B5SW1hZ2VEYXRhKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNTUwLDEyICsy
NDEsOCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0
Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAg
bV9pbWFnZVJlc3VsdCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZUJ1ZmZlcihtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogfQogCiBJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQpAQCAtNTY0LDE0ICsyNTEsOCBAQCBJbWFnZURhdGEqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAo
bV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0g
ICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9pbWFnZVJlc3Vs
dCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVu
ZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2Up
OworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+aW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiBJ
bWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
QEAgLTU4MCw1MCArMjYxLDE2IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6
ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkc3RDb2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29u
dmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAg
ICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJl
dHVybiBkc3RDb2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZHN0Q29sb3JTcGFj
ZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5v
dCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIG1faW1hZ2VSZXN1bHQgPSBGaWx0ZXJJbWFnZTo6
Y3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1faW1h
Z2VSZXN1bHQgPyBtX2ltYWdlUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3Rt
ZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZm
ZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3Vw
cG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJS
ZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9y
U3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsKLQotICAg
IGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
Ci0gICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSNlbmRpZgor
ICAgIG1faW1hZ2VSZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkc3RDb2xvclNwYWNlKTsK
IH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggMGExMDJkOGNkZmUwZGRjMWQ3M2U5NGNmN2JlMWViNGIwZTIw
ZWFjOC4uZGU5NjVlNWRjOWEwMDQ1NmFjZWExODE0Mzk2MTUyZDEzOGQyZmM1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3
cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmls
dGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVySW1hZ2U7CiBjbGFzcyBJbWFn
ZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKIApAQCAtOTEsMTMgKzkzLDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0
cygpIGNvbnN0OwogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNr
cywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0Lgot
ICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0gICAgfQorICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VSZXN1bHQ7IH0KIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwpAQCAtMTE3LDExICsxMTMsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KCk7CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAK
ICAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9CkBAIC0xODgsMzIgKzE3OSwxNSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwogICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7Ci0KICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CiAK
LSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owot
ICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEmLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gY29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlRGF0YSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIAotCiAgICAgRmlsdGVyJiBtX2ZpbHRl
cjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKLSAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1faW1hZ2VSZXN1
bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1MDI4YTZjMTdkYjczM2FmZTVhMjU2NDBmMzM5MDExODFhY2FjZjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZShXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOworfQorCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGVJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAo
bG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gbG9naWNhbFNpemU7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
c2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2UoV1RGTW92ZShpbWFnZURh
dGEpLCBhbHBoYUZvcm1hdCwgcmVuZGVyaW5nTW9kZSwgeyBsb2dpY2FsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTggfSkpOworfQorCitGaWx0ZXJJ
bWFnZTo6RmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAg
IDogbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKKyAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlcik7CisgICAgbV9yZW5kZXJpbmdNb2RlID0gbV9pbWFnZUJ1ZmZlci0+cmVuZGVy
aW5nTW9kZSgpOworICAgIG1fcGFyYW1ldGVycyA9IG1faW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMo
KTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKFJlZlB0cjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9w
YXJhbWV0ZXJzKHBhcmFtZXRlcnMpCit7CisgICAgQVNTRVJUKGltYWdlRGF0YSk7CisgICAgaW1h
Z2VEYXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpID0gV1RGTW92ZShpbWFnZURhdGEpOworfQorCitJ
bWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2lt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUs
IG1fcmVuZGVyaW5nTW9kZSwgbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChpbWFnZURhdGFJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisK
KyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0
YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21w
b25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
M10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXpl
LndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
KyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0Owor
ICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVz
dC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKwor
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
KyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK1JlZlB0cjxJbWFnZURhdGE+JiBGaWx0ZXJJbWFnZTo6aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91
bnByZW11bHRpcGxpZWRJbWFnZURhdGEgOiBtX3ByZW11bHRpcGxpZWRJbWFnZURhdGE7Cit9CisK
K0ltYWdlRGF0YSogRmlsdGVySW1hZ2U6OmltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3Rz
KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhLmdldCgpOworICAgIAorICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGltYWdl
RGF0YSA9IG1faW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIHJldHVy
biBpbWFnZURhdGEuZ2V0KCk7CisgICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1l
dGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCks
ICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNjYWxl
ZFNpemUpOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVj
dC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNj
YWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weUlt
YWdlRGF0YSgqaW1hZ2VEYXRhLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAg
cmV0dXJuIGltYWdlRGF0YTsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5l
cyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVy
c2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkg
Y29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUg
ZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2Ug
JiYgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RworICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworICAg
IEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSk7CisgICAg
c2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlm
IG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3Qu
eCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMg
bm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgp
IDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVj
dC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAg
ICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGlu
dCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNp
emUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisg
ICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAg
IGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAg
ICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2lu
KSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkg
KiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICog
NDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsg
KCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBh
aW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwg
eUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNp
emUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Cisg
ICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47
CisgICAgfQorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVk
SW1hZ2VEYXRhKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpCit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVy
cy5yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghY29udmVydGVkSW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZm
ZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VC
dWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgcmVjdCk7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBpbWFn
ZURhdGEuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3BhcmFtZXRlcnMucmVzb2x1dGlv
blNjYWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0
b3JlIGluY29taW5nIEltYWdlRGF0YQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNv
bHV0aW9uU2NhbGUsIG1fcGFyYW1ldGVycy5jb2xvclNwYWNlKTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGltYWdlQnVmZmVyLT5wdXRJbWFn
ZURhdGEoYWxwaGFGb3JtYXQsIGltYWdlRGF0YSwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZl
cnRlZEltYWdlRGF0YSgqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlRGF0YShVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKK3sKKyAgICBhdXRvJiBpbWFnZURhdGEgPSBpbWFnZURhdGFJZkV4aXN0cyhhbHBoYUZv
cm1hdCk7CisKKyAgICBpZiAoIWltYWdlRGF0YSkgeworICAgICAgICAvLyBXZSBwcmVmZXIgYSBj
b252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXIgJiYgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
eworICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH07CisgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0
ZWRJbWFnZURhdGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKm1faW1hZ2VCdWZmZXIsIGFscGhh
Rm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgY29weUltYWdlQnl0
ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbWFnZURhdGEgPSB0aGlz
LT5pbWFnZURhdGEoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghaW1hZ2VEYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRJbWFnZURh
dGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKmltYWdlRGF0YSwgYWxwaGFGb3JtYXQsICpjb2xv
clNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMoKmltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3Jj
UmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cg
aGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9Q
QVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4g
YXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9u
IGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUg
e3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRo
aXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNw
YWNlKG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fcGFyYW1l
dGVycy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZEltYWdl
RGF0YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0gbnVsbHB0cjsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjVjNjRjYzEwOTU3OGU2MDQyMTIzZWNhNjNkODZiM2UwZTU5MTcwOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJ
bWFnZT4gY3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKTsK
KworICAgIFJlZlB0cjxJbWFnZURhdGE+JiBpbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uKTsKKyAgICBJbWFnZURhdGEqIGltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlJbWFnZURhdGEoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7
CisgICAgCisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYp
OworICAgIEZpbHRlckltYWdlKFJlZlB0cjxJbWFnZURhdGE+JiYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIFJlbmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVy
cyYpOworCisgICAgYm9vbCByZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOworICAgIHZvaWQgY29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0
Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlRGF0YSYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgCisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fdW5wcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhOworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdl
RGF0YTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OlBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3ODlhODljNTQzMmVmOGUzMmY5MDRlMzQ3MDNh
ZjI1MDQ4M2E1NzEwLi42MmE5YmMxNTE3YzQyZDlmOTlhYmE4YjgyMDNhZmNiNDY3YmU0NTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMjcwLDcgKzI3MCw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFw
aGljCiAgICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAg
IGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKICAgICAgICAgICAgIGxh
c3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKTsKICAgICAgICAgfQogICAg
ICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QnVpbHQ7CkBAIC0zMTUsNyArMzE0
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICAgICAgLy8gb3Igbm9uZSBvZiB0aGVt
IHdpbGwgYmUgY2hhbmdlZC4KICAgICAgICAgaWYgKCFwcmltaXR2ZS0+c2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKGVmZmVjdCwgYXR0cmlidXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKGVmZmVjdCk7CisgICAgICAgIGVmZmVj
dC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1h
Z2Ugb24gdGhlIHNjcmVlbi4KICAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbigqb2Jq
ZWN0RmlsdGVyRGF0YVBhaXIua2V5LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMzNhOTc1
MWFmYmQ4NmQxMjZkOGY5ZTY0MjIyMjI5MGVjZDdiNjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAg
LTkyLDE1ICs5Miw0IEBAIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKICAg
ICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFy
UmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLXsKLSAgICBpZiAoIWVmZmVj
dC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVmZmVjdC0+Y2xlYXJSZXN1
bHQoKTsKLQotICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZl
Y3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4
OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjcxYjJkOWUyNzUwODliNTUzMTg3Njk3MjhhNzY0N2Y0MWE1
MTEzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTYzLDcgKzYzLDYgQEAgcHVibGljOgogICAgIGlubGlu
ZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsg
cmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVjdCk7IH0KIAogICAgIHZvaWQgY2xlYXJF
ZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7
CiAKIHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQo=
</data>
<flag name="commit-queue"
          id="447616"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427121</attachid>
            <date>2021-04-26 22:33:30 -0700</date>
            <delta_ts>2021-04-27 00:16:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210426223329.patch</filename>
            <type>text/plain</type>
            <size>53860</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmOGIwOWZhMTdjM2Fl
YzhhYTE2NWRkZDNkZWJlMGQ5NTI0MTQ2Yy4uZTA5MzUyOTEzOTY3MDU4OThiZmI5MDA0ZThmMzMx
ZjRiZjYzMTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTA0LTI2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
SW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdl
Qnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5
aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZURhdGFUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckltYWdlOjppbWFnZURhdGFJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6aW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpn
ZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzSW1h
Z2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmNvcHlJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9y
bVRvQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAyMS0wNC0yNiAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW1dlYklE
TF0gUmVtb3ZlIFtDYWxsTmFtZWRTZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc10gZXh0
ZW5kZWQgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBiNDhjMTFkM2EyZmQ3OGYxY2M4OTgw
NjNhZjMyNzVlODJkNDYzOTMuLjhiZmEyNjJhMzYxYmU4YjJjNmVlNzUxNWQ1OTM1YzZhYWYzMzRl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDU2LDYgKzIwNTYsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU5NTE0YjU5NjJhOGMzZjgyNTBmN2JlMTkxOWJmMjJmMjUwNzcwZjQuLjNkMjE0
YjU5ZDI2NDg3YmU0Y2MxNDUyZGYxZGQ2MzlmMmRjZTZhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkz
LDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDkzNCw2ICsyNDkzNiw4IEBACiAJCQkJMDhD
OTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4
MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4
NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJ
NzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MkM5
MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApp
bmRleCA0ZDIyOGY5MDViMjBmYjkxM2FkZGZiZGJkMjk4OTliNDg4MWY2ZGE5Li44NTJkODgyZjQ3
NGRlNDAxY2FhMzMwMDA2Yzk3M2M0NmRhZWVkYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtODcs
MTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwg
MjU1LCAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFl
MmY3NmFlYTBjMy4uMGJjM2UyNjdhYTk2MjAxNTA4MDIyZDA5YTY3YmQyMmExOThjZTdiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaApAQCAtNTgsMTUgKzU4LDExIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNv
bnN0IHsgcmV0dXJuIG1fazQ7IH0KICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVk
OgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7
IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBw
cml2YXRlOgogICAgIEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKICAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQogCi0gICAg
dm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1
MTM1MjFlYTRjYTViYTkwNGYyZDYwNWRmOTlhNDRhMDQuLmJkZmM1YzgxZmMxNTM4NGY1MzM0ZmQw
YTU0MmM1ZDljOGFjYzdkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTE4Niw2OSArMTg3LDEzIEBAIHZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
IHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlw
bGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCk7Ci0gICAgfQotICAgIAogICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBm
dW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7
IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVWludDhDbGFt
cGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
OwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKLSAgICBpbnQg
cGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVz
dCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNT
RVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90
KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0g
ICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0
YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4
KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAg
ICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxE
YXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0g
ICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5
TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51
bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVh
Y2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBp
ZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBB
bHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBp
eGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwg
YW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAg
ICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7
Ci0gICAgfQotfQotCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewotICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBtX2ltYWdlUmVzdWx0ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCkBAIC0yNjUsMjgzICsyMTAsMjkgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFn
ZVJlc3VsdC0+aW1hZ2VCdWZmZXIoKSA6IG51bGxwdHI7CiB9CiAKIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYg
cmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAg
IEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICByZXR1cm4gbV9pbWFnZVJlc3VsdCA/IG1f
aW1hZ2VSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0KIAogUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQog
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkg
KiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNv
bG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0g
ICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRy
YW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxl
ZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlv
bi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVy
biBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlm
IChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2Nh
bGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkg
Pj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
eE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhP
cmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4g
PSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4
RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAg
aW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAt
eU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2Nh
bGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6
ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0g
c2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRl
c3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAg
ICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4
ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0
aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsK
LSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRp
cGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQg
PSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5k
KSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsw
XSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBh
bHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAg
ICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9
IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VEYXRh
JiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkpOwot
ICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9y
ZSBpbmNvbWluZyBJbWFnZURhdGEKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5wdXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1
ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJl
Y3QsIG91dHB1dEZvcm1hdCk7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJn
ZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2Ug
YW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JT
cGFjZSk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4g
ZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdl
RGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwK
LSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAg
ICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSwgaW1hZ2VEYXRhLCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVk
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRl
ZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIHJldHVybiBt
X2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0K
IAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbCht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkp
OwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRh
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1
dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVz
dGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9pbWFnZVJlc3VsdC0+Y29weUltYWdl
RGF0YShkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewog
ICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
ewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlm
ICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0
U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBt
X2ltYWdlUmVzdWx0LT5jb3B5SW1hZ2VEYXRhKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNTUwLDEyICsy
NDEsOCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0
Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAg
bV9pbWFnZVJlc3VsdCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZUJ1ZmZlcihtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogfQogCiBJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQpAQCAtNTY0LDE0ICsyNTEsOCBAQCBJbWFnZURhdGEqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAo
bV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0g
ICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9pbWFnZVJlc3Vs
dCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVu
ZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2Up
OworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+aW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiBJ
bWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
QEAgLTU4MCw1MCArMjYxLDE2IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6
ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkc3RDb2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29u
dmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAg
ICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJl
dHVybiBkc3RDb2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZHN0Q29sb3JTcGFj
ZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5v
dCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIG1faW1hZ2VSZXN1bHQgPSBGaWx0ZXJJbWFnZTo6
Y3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1faW1h
Z2VSZXN1bHQgPyBtX2ltYWdlUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3Rt
ZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZm
ZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3Vw
cG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJS
ZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9y
U3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsKLQotICAg
IGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
Ci0gICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSNlbmRpZgor
ICAgIG1faW1hZ2VSZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkc3RDb2xvclNwYWNlKTsK
IH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggMGExMDJkOGNkZmUwZGRjMWQ3M2U5NGNmN2JlMWViNGIwZTIw
ZWFjOC4uZGU5NjVlNWRjOWEwMDQ1NmFjZWExODE0Mzk2MTUyZDEzOGQyZmM1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3
cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmls
dGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVySW1hZ2U7CiBjbGFzcyBJbWFn
ZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKIApAQCAtOTEsMTMgKzkzLDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0
cygpIGNvbnN0OwogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNr
cywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0Lgot
ICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0gICAgfQorICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VSZXN1bHQ7IH0KIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwpAQCAtMTE3LDExICsxMTMsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KCk7CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAK
ICAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9CkBAIC0xODgsMzIgKzE3OSwxNSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwogICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7Ci0KICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CiAK
LSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owot
ICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEmLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gY29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlRGF0YSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIAotCiAgICAgRmlsdGVyJiBtX2ZpbHRl
cjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKLSAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1faW1hZ2VSZXN1
bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1MDI4YTZjMTdkYjczM2FmZTVhMjU2NDBmMzM5MDExODFhY2FjZjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZShXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOworfQorCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGVJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAo
bG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gbG9naWNhbFNpemU7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
c2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2UoV1RGTW92ZShpbWFnZURh
dGEpLCBhbHBoYUZvcm1hdCwgcmVuZGVyaW5nTW9kZSwgeyBsb2dpY2FsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTggfSkpOworfQorCitGaWx0ZXJJ
bWFnZTo6RmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAg
IDogbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKKyAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlcik7CisgICAgbV9yZW5kZXJpbmdNb2RlID0gbV9pbWFnZUJ1ZmZlci0+cmVuZGVy
aW5nTW9kZSgpOworICAgIG1fcGFyYW1ldGVycyA9IG1faW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMo
KTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKFJlZlB0cjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9w
YXJhbWV0ZXJzKHBhcmFtZXRlcnMpCit7CisgICAgQVNTRVJUKGltYWdlRGF0YSk7CisgICAgaW1h
Z2VEYXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpID0gV1RGTW92ZShpbWFnZURhdGEpOworfQorCitJ
bWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2lt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUs
IG1fcmVuZGVyaW5nTW9kZSwgbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChpbWFnZURhdGFJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisK
KyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0
YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21w
b25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
M10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXpl
LndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
KyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0Owor
ICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVz
dC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKwor
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
KyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK1JlZlB0cjxJbWFnZURhdGE+JiBGaWx0ZXJJbWFnZTo6aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91
bnByZW11bHRpcGxpZWRJbWFnZURhdGEgOiBtX3ByZW11bHRpcGxpZWRJbWFnZURhdGE7Cit9CisK
K0ltYWdlRGF0YSogRmlsdGVySW1hZ2U6OmltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3Rz
KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhLmdldCgpOworICAgIAorICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGltYWdl
RGF0YSA9IG1faW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIHJldHVy
biBpbWFnZURhdGEuZ2V0KCk7CisgICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1l
dGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCks
ICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNjYWxl
ZFNpemUpOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVj
dC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNj
YWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weUlt
YWdlRGF0YSgqaW1hZ2VEYXRhLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAg
cmV0dXJuIGltYWdlRGF0YTsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5l
cyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVy
c2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkg
Y29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUg
ZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2Ug
JiYgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RworICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworICAg
IEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSk7CisgICAg
c2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlm
IG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3Qu
eCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMg
bm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgp
IDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVj
dC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAg
ICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGlu
dCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNp
emUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisg
ICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAg
IGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAg
ICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2lu
KSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkg
KiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICog
NDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsg
KCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBh
aW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwg
eUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNp
emUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Cisg
ICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47
CisgICAgfQorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVk
SW1hZ2VEYXRhKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpCit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVy
cy5yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghY29udmVydGVkSW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZm
ZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VC
dWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgcmVjdCk7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBpbWFn
ZURhdGEuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3BhcmFtZXRlcnMucmVzb2x1dGlv
blNjYWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0
b3JlIGluY29taW5nIEltYWdlRGF0YQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNv
bHV0aW9uU2NhbGUsIG1fcGFyYW1ldGVycy5jb2xvclNwYWNlKTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGltYWdlQnVmZmVyLT5wdXRJbWFn
ZURhdGEoYWxwaGFGb3JtYXQsIGltYWdlRGF0YSwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZl
cnRlZEltYWdlRGF0YSgqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlRGF0YShVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKK3sKKyAgICBhdXRvJiBpbWFnZURhdGEgPSBpbWFnZURhdGFJZkV4aXN0cyhhbHBoYUZv
cm1hdCk7CisKKyAgICBpZiAoIWltYWdlRGF0YSkgeworICAgICAgICAvLyBXZSBwcmVmZXIgYSBj
b252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXIgJiYgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
eworICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH07CisgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0
ZWRJbWFnZURhdGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKm1faW1hZ2VCdWZmZXIsIGFscGhh
Rm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgY29weUltYWdlQnl0
ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbWFnZURhdGEgPSB0aGlz
LT5pbWFnZURhdGEoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghaW1hZ2VEYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRJbWFnZURh
dGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKmltYWdlRGF0YSwgYWxwaGFGb3JtYXQsICpjb2xv
clNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMoKmltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3Jj
UmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cg
aGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9Q
QVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4g
YXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9u
IGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUg
e3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRo
aXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNw
YWNlKG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fcGFyYW1l
dGVycy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZEltYWdl
RGF0YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0gbnVsbHB0cjsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGQ1N2E5NzUwMzI0NWE3ZGFmNDY2M2ZlYjI0MzE3NGU1MzE0MjBiMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRl
ckltYWdlPiBjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50
U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigp
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4mIGltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVs
dGlwbGljYXRpb24pOworICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgY29weUltYWdlRGF0YShVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0
KTsKKyAgICAKKyAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2UpOworCitwcml2YXRlOgorICAgIEZpbHRlckltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4m
Jik7CisgICAgRmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlRGF0YT4mJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0
ZXJzJik7CisKKyAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRl
cyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bnByZW11bHRp
cGxpZWRJbWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc4OWE4OWM1NDMyZWY4ZTMyZjkwNGUzNDcw
M2FmMjUwNDgzYTU3MTAuLjYyYTliYzE1MTdjNDJkOWY5OWFiYThiODIwM2FmY2I0NjdiZTQ1OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNzAsNyArMjcwLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdy
YXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAgICAg
ICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAg
bGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKQEAgLTMxNSw3ICsz
MTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICAvLyBvciBub25lIG9mIHRo
ZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKKyAgICAgICAgZWZm
ZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBp
bWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpv
YmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4zM2E5
NzUxYWZiZDg2ZDEyNmQ4ZjllNjQyMjIyMjkwZWNkN2I2MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApA
QCAtOTIsMTUgKzkyLDQgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQog
ICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICghZWZm
ZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVhclJl
c3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVm
ZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNm
Yzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNzFiMmQ5ZTI3NTA4OWI1NTMxODc2OTcyOGE3NjQ3ZjQx
YTUxMTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAgaW5s
aW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkg
eyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiAgICAgdm9pZCBjbGVh
ckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3Qq
KTsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>
<flag name="commit-queue"
          id="447620"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427123</attachid>
            <date>2021-04-26 23:24:30 -0700</date>
            <delta_ts>2021-04-27 13:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210426232429.patch</filename>
            <type>text/plain</type>
            <size>53857</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmOGIwOWZhMTdjM2Fl
YzhhYTE2NWRkZDNkZWJlMGQ5NTI0MTQ2Yy4uZTA5MzUyOTEzOTY3MDU4OThiZmI5MDA0ZThmMzMx
ZjRiZjYzMTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTA0LTI2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
SW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdl
Qnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5
aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZURhdGFUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckltYWdlOjppbWFnZURhdGFJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6aW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpn
ZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzSW1h
Z2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmNvcHlJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9y
bVRvQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAyMS0wNC0yNiAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW1dlYklE
TF0gUmVtb3ZlIFtDYWxsTmFtZWRTZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc10gZXh0
ZW5kZWQgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBiNDhjMTFkM2EyZmQ3OGYxY2M4OTgw
NjNhZjMyNzVlODJkNDYzOTMuLjhiZmEyNjJhMzYxYmU4YjJjNmVlNzUxNWQ1OTM1YzZhYWYzMzRl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDU2LDYgKzIwNTYsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU5NTE0YjU5NjJhOGMzZjgyNTBmN2JlMTkxOWJmMjJmMjUwNzcwZjQuLjNkMjE0
YjU5ZDI2NDg3YmU0Y2MxNDUyZGYxZGQ2MzlmMmRjZTZhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkz
LDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDkzNCw2ICsyNDkzNiw4IEBACiAJCQkJMDhD
OTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4
MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4
NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJ
NzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MkM5
MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApp
bmRleCA0ZDIyOGY5MDViMjBmYjkxM2FkZGZiZGJkMjk4OTliNDg4MWY2ZGE5Li44NTJkODgyZjQ3
NGRlNDAxY2FhMzMwMDA2Yzk3M2M0NmRhZWVkYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtODcs
MTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwg
MjU1LCAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFl
MmY3NmFlYTBjMy4uMGJjM2UyNjdhYTk2MjAxNTA4MDIyZDA5YTY3YmQyMmExOThjZTdiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaApAQCAtNTgsMTUgKzU4LDExIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNv
bnN0IHsgcmV0dXJuIG1fazQ7IH0KICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVk
OgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7
IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBw
cml2YXRlOgogICAgIEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKICAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQogCi0gICAg
dm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1
MTM1MjFlYTRjYTViYTkwNGYyZDYwNWRmOTlhNDRhMDQuLmJkZmM1YzgxZmMxNTM4NGY1MzM0ZmQw
YTU0MmM1ZDljOGFjYzdkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTE4Niw2OSArMTg3LDEzIEBAIHZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
IHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlw
bGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCk7Ci0gICAgfQotICAgIAogICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBm
dW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7
IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVWludDhDbGFt
cGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
OwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKLSAgICBpbnQg
cGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVz
dCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNT
RVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90
KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0g
ICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0
YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4
KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAg
ICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxE
YXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0g
ICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5
TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51
bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVh
Y2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBp
ZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBB
bHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBp
eGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwg
YW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAg
ICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7
Ci0gICAgfQotfQotCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewotICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBtX2ltYWdlUmVzdWx0ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCkBAIC0yNjUsMjgzICsyMTAsMjkgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFn
ZVJlc3VsdC0+aW1hZ2VCdWZmZXIoKSA6IG51bGxwdHI7CiB9CiAKIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYg
cmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAg
IEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICByZXR1cm4gbV9pbWFnZVJlc3VsdCA/IG1f
aW1hZ2VSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0KIAogUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQog
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkg
KiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNv
bG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0g
ICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRy
YW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxl
ZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlv
bi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVy
biBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlm
IChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2Nh
bGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkg
Pj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
eE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhP
cmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4g
PSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4
RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAg
aW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAt
eU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2Nh
bGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6
ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0g
c2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRl
c3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAg
ICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4
ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0
aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsK
LSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRp
cGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQg
PSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5k
KSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsw
XSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBh
bHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAg
ICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9
IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VEYXRh
JiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkpOwot
ICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9y
ZSBpbmNvbWluZyBJbWFnZURhdGEKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5wdXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1
ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJl
Y3QsIG91dHB1dEZvcm1hdCk7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJn
ZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQotewotICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2Ug
YW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JT
cGFjZSk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4g
ZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdl
RGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwK
LSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAg
ICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSwgaW1hZ2VEYXRhLCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVk
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRl
ZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIHJldHVybiBt
X2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0K
IAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbCht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkp
OwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRh
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1
dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVz
dGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9pbWFnZVJlc3VsdC0+Y29weUltYWdl
RGF0YShkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewog
ICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
ewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlm
ICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0
U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBt
X2ltYWdlUmVzdWx0LT5jb3B5SW1hZ2VEYXRhKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAogSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNTUwLDEyICsy
NDEsOCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0
Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAg
bV9pbWFnZVJlc3VsdCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZUJ1ZmZlcihtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogfQogCiBJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQpAQCAtNTY0LDE0ICsyNTEsOCBAQCBJbWFnZURhdGEqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAo
bV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0g
ICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9pbWFnZVJlc3Vs
dCA9IEZpbHRlckltYWdlOjpjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVu
ZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2Up
OworICAgIHJldHVybiBtX2ltYWdlUmVzdWx0ID8gbV9pbWFnZVJlc3VsdC0+aW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiBJ
bWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
QEAgLTU4MCw1MCArMjYxLDE2IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6
ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkc3RDb2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29u
dmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAg
ICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJl
dHVybiBkc3RDb2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZHN0Q29sb3JTcGFj
ZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5v
dCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIG1faW1hZ2VSZXN1bHQgPSBGaWx0ZXJJbWFnZTo6
Y3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1faW1h
Z2VSZXN1bHQgPyBtX2ltYWdlUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3Rt
ZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZm
ZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3Vw
cG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJS
ZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9y
U3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsKLQotICAg
IGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
Ci0gICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSNlbmRpZgor
ICAgIG1faW1hZ2VSZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkc3RDb2xvclNwYWNlKTsK
IH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggMGExMDJkOGNkZmUwZGRjMWQ3M2U5NGNmN2JlMWViNGIwZTIw
ZWFjOC4uZGU5NjVlNWRjOWEwMDQ1NmFjZWExODE0Mzk2MTUyZDEzOGQyZmM1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3
cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmls
dGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVySW1hZ2U7CiBjbGFzcyBJbWFn
ZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKIApAQCAtOTEsMTMgKzkzLDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0
cygpIGNvbnN0OwogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNr
cywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0Lgot
ICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0gICAgfQorICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VSZXN1bHQ7IH0KIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwpAQCAtMTE3LDExICsxMTMsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KCk7CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAK
ICAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9CkBAIC0xODgsMzIgKzE3OSwxNSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwogICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7Ci0KICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CiAK
LSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owot
ICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEmLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gY29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlRGF0YSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIAotCiAgICAgRmlsdGVyJiBtX2ZpbHRl
cjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKLSAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1faW1hZ2VSZXN1
bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ4ZTg1NmYzZTExY2MwYmE1ODUxYTg1MWI5MGVmNTE2YzExMDVjODIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZShXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOworfQorCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGVJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAo
bG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gbG9naWNhbFNpemU7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
c2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2UoV1RGTW92ZShpbWFnZURh
dGEpLCBhbHBoYUZvcm1hdCwgcmVuZGVyaW5nTW9kZSwgeyBsb2dpY2FsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTggfSkpOworfQorCitGaWx0ZXJJ
bWFnZTo6RmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAg
IDogbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKKyAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlcik7CisgICAgbV9yZW5kZXJpbmdNb2RlID0gbV9pbWFnZUJ1ZmZlci0+cmVuZGVy
aW5nTW9kZSgpOworICAgIG1fcGFyYW1ldGVycyA9IG1faW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMo
KTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKFJlZlB0cjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9w
YXJhbWV0ZXJzKHBhcmFtZXRlcnMpCit7CisgICAgQVNTRVJUKGltYWdlRGF0YSk7CisgICAgaW1h
Z2VEYXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpID0gV1RGTW92ZShpbWFnZURhdGEpOworfQorCitJ
bWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2lt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUs
IG1fcmVuZGVyaW5nTW9kZSwgbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChpbWFnZURhdGFJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisK
KyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRo
KCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBz
cmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRl
c3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0
YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21w
b25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
M10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXpl
LndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
KyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0Owor
ICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVz
dC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKwor
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
KyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK1JlZlB0cjxJbWFnZURhdGE+JiBGaWx0ZXJJbWFnZTo6aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91
bnByZW11bHRpcGxpZWRJbWFnZURhdGEgOiBtX3ByZW11bHRpcGxpZWRJbWFnZURhdGE7Cit9CisK
K0ltYWdlRGF0YSogRmlsdGVySW1hZ2U6OmltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3Rz
KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhLmdldCgpOworICAgIAorICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGltYWdl
RGF0YSA9IG1faW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIHJldHVy
biBpbWFnZURhdGEuZ2V0KCk7CisgICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1l
dGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCks
ICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNjYWxl
ZFNpemUpOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVj
dC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNj
YWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weUlt
YWdlRGF0YSgqaW1hZ2VEYXRhLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAg
cmV0dXJuIGltYWdlRGF0YTsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5l
cyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVy
c2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkg
Y29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUg
ZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2Ug
JiYgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAg
ICBzY2FsZWRSZWN0LnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworICAgIElu
dFNpemUgc2NhbGVkUGFpbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSk7CisgICAgc2Nh
bGVkUGFpbnRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5v
dCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgp
IDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRp
b24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90
IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9
IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54
KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAg
eERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4
RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAg
aW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlm
ICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3Jp
Z2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBp
ZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAq
IDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0
OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsK
KyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5
RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50
U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVu
ZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUp
OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAg
ICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47Cisg
ICAgfQorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkSW1h
Z2VEYXRhKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBh
bHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0
aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5y
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIg
dG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZm
ZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgcmVjdCk7Cit9CisKK1JlZlB0cjxJbWFnZURh
dGE+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiBpbWFnZURh
dGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBpbWFnZURh
dGEuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3BhcmFtZXRlcnMucmVzb2x1dGlvblNj
YWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3Jl
IGluY29taW5nIEltYWdlRGF0YQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNvbHV0
aW9uU2NhbGUsIG1fcGFyYW1ldGVycy5jb2xvclNwYWNlKTsKKyAgICBpZiAoIWltYWdlQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURh
dGEoYWxwaGFGb3JtYXQsIGltYWdlRGF0YSwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRl
ZEltYWdlRGF0YSgqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsK
K30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlRGF0YShVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKK3sKKyAgICBhdXRvJiBpbWFnZURhdGEgPSBpbWFnZURhdGFJZkV4aXN0cyhhbHBoYUZvcm1h
dCk7CisKKyAgICBpZiAoIWltYWdlRGF0YSkgeworICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXIg
JiYgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewor
ICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX3Bh
cmFtZXRlcnMubG9naWNhbFNpemUpIH07CisgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRJ
bWFnZURhdGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKm1faW1hZ2VCdWZmZXIsIGFscGhhRm9y
bWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMo
KmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbWFnZURhdGEgPSB0aGlzLT5p
bWFnZURhdGEoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghaW1hZ2VEYXRhKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEg
PSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKmltYWdlRGF0YSwgYWxwaGFGb3JtYXQsICpjb2xvclNw
YWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRh
dGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29weUltYWdlQnl0ZXMoKmltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVj
dCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFu
ZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJB
TShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9wYXJhbWV0ZXJz
LmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZv
aWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5
IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3By
ZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMt
PmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNl
KG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fcGFyYW1ldGVy
cy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZEltYWdlRGF0
YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0gbnVsbHB0cjsKKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGQ1N2E5NzUwMzI0NWE3ZGFmNDY2M2ZlYjI0MzE3NGU1MzE0MjBiMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
aApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlcklt
YWdlPiBjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVz
dGluYXRpb25Db2xvclNwYWNlKTsKKworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOwor
CisgICAgUmVmUHRyPEltYWdlRGF0YT4mIGltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb24pOworICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgY29weUltYWdlRGF0YShVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsK
KyAgICAKKyAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpOworCitwcml2YXRlOgorICAgIEZpbHRlckltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJik7
CisgICAgRmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlRGF0YT4mJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJz
Jik7CisKKyAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRD
b252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bnByZW11bHRpcGxp
ZWRJbWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc4OWE4OWM1NDMyZWY4ZTMyZjkwNGUzNDcwM2Fm
MjUwNDgzYTU3MTAuLjYyYTliYzE1MTdjNDJkOWY5OWFiYThiODIwM2FmY2I0NjdiZTQ1OTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCkBAIC0yNzAsNyArMjcwLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAgICAgICAg
ZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAgbGFz
dEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJS
ZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9CiAgICAg
ICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKQEAgLTMxNSw3ICszMTQs
NyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICAvLyBvciBub25lIG9mIHRoZW0g
d2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKKyAgICAgICAgZWZmZWN0
LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFn
ZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmpl
Y3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4zM2E5NzUx
YWZiZDg2ZDEyNmQ4ZjllNjQyMjIyMjkwZWNkN2I2MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAt
OTIsMTUgKzkyLDQgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQogICAg
IGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICghZWZmZWN0
LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVhclJlc3Vs
dCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5
NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNzFiMmQ5ZTI3NTA4OWI1NTMxODc2OTcyOGE3NjQ3ZjQxYTUx
MTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAgaW5saW5l
IEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyBy
ZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiAgICAgdm9pZCBjbGVhckVm
ZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsK
IAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427188</attachid>
            <date>2021-04-27 13:31:23 -0700</date>
            <delta_ts>2021-04-27 14:00:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210427133122.patch</filename>
            <type>text/plain</type>
            <size>60028</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmOGIwOWZhMTdjM2Fl
YzhhYTE2NWRkZDNkZWJlMGQ5NTI0MTQ2Yy4uZTFlYjY2ZmNlMWNlYTAzNWNiMmMzZmI2NjQ5ODNl
MGM5ZWYyMGM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDIxLTA0LTI3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
SW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5nIHRoZSByZXN1bHQgb2Yg
YXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMgaW5wdXRzIHRvIGEgbmV3
IGNhbGxzIG5hbWVkICdGaWx0ZXJJbWFnZScuIFRoaXMgd2lsbAorICAgICAgICBzaW1wbGlmeSB0
aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZmZWN0LiBJdCB3aWxsIGFsc28gYWxsb3cgaW50
ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFnZSBzZWFtbGVzc2x5LCBzaW1wbGlmeWluZyB0
aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24gYW5kIHNhdmluZworICAgICAgICBtZW1vcnkgZm9yIEZp
bHRlckVmZmVjdCB3aGljaCBjdXJyZW50bHkgcmVxdWlyZXMgYWxsb2NhdGluZyBtZW1vcnkgZm9y
CisgICAgICAgIHRoZSBtYXhFZmZlY3RSZWN0KCkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhl
IG9wcG9zaXRlIAorICAgICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMo
KS4gQ29ycmVjdGluZyB0aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBk
b25lIGJ5IEZpbHRlckVmZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBw
bHkpOgorICAgICAgICBDb3JyZWN0IHRoZSBwcmVtdWx0aXBsaWVkIHJlc3VsdCBpZiBuZWVkZWQu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAg
ICBDbGVhcmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUg
cG9pbnRlci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFn
ZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9E
ZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICBB
bGwgdGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIG1vdmVkIHRvIEZpbHRlckltYWdl
LmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlw
bGllZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZUltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlRGF0YUlmRXhpc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJ
bWFnZTo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKworICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oOgorICAgICAgICBDbGVhcmluZyB0aGUgcmVzdWx0IHJlY3Vyc2l2ZWx5IGNhbiBiZSBk
b25lIGJ5IEZpbHRlckVmZmVjdC4KKwogMjAyMS0wNC0yNiAgQWxleGV5IFNodmF5a2EgIDxzaHZh
aWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW1dlYklETF0gUmVtb3ZlIFtDYWxsTmFtZWRT
ZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc10gZXh0ZW5kZWQgYXR0cmlidXRlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDBiNDhjMTFkM2EyZmQ3OGYxY2M4OTgwNjNhZjMyNzVlODJkNDYzOTMuLjhi
ZmEyNjJhMzYxYmU4YjJjNmVlNzUxNWQ1OTM1YzZhYWYzMzRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0yMDU2LDYgKzIwNTYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU5NTE0YjU5NjJh
OGMzZjgyNTBmN2JlMTkxOWJmMjJmMjUwNzcwZjQuLjNkMjE0YjU5ZDI2NDg3YmU0Y2MxNDUyZGYx
ZGQ2MzlmMmRjZTZhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkzLDggQEAKIAkJNzJCQUMzQUMyM0Ux
RTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEz
QTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVy
SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAw
NEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2
MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkVB
MDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNDkzNCw2ICsyNDkzNiw4IEBACiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVD
IC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3Njcz
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJDOTBBMzkyNjM2NEExRjAwNzdG
MEU4IC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTgg
LyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbnMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCA0ZDIyOGY5MDViMjBmYjkx
M2FkZGZiZGJkMjk4OTliNDg4MWY2ZGE5Li44NTJkODgyZjQ3NGRlNDAxY2FhMzMwMDA2Yzk3M2M0
NmRhZWVkYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNv
bXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVD
b21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlw
ZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVu
c2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltd
ID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgK
aW5kZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uMWZhMGNiM2E2
MzczZTUzZDVkZWYzZGQ0ZTNiNmUzNzA3NDNhYTVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNTgsMTYg
KzU4LDEzIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJuIG1fazQ7IH0K
ICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wgcmVxdWlyZXNW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgIT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBwcml2YXRlOgogICAgIEZFQ29tcG9z
aXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVz
dWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQ
aXhlbHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAppbmRleCAxODY3ZmNlNTEzNTIxZWE0Y2E1YmE5MDRmMmQ2MDVkZjk5YTQ0YTA0
Li40NGNhNTYzMjUxNzdjZDFmM2E3OWQyMTk5MzkyM2I4ZjM1NTJmNzA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYg
KzI2LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC0x
ODYsNjkgKzE4NywyMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgIGlmIChtX2Fi
c29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAocmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSkt
PmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5w
dXRFZmZlY3RzKSB7CisgICAgICAgICAgICBpZiAoIWluLT5tYXlQcm9kdWNlSW52YWxpZFByZW11
bHRpcGxpZWRQaXhlbHMoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGluLT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdCgpOworICAgICAgICB9CiAgICAgfQotICAg
IAorCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFu
ZCByZXR1cm4gZWFybGllci4KICAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIH0KIAotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAv
LyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBj
YW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VB
cnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCog
cGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3Ro
ID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRl
cyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5
TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChw
aXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBp
eGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4
eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAg
IHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNp
eHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVs
RGF0YSwgc2l4dGVlblBpeGVscyk7Ci0gICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAg
ICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJh
eUxlbmd0aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxB
cnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tp
bmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAg
IHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGgg
Ynl0ZSBpbiBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0g
ICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRo
ZSBwaXhlbCBsb2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERh
dGEgPSBhOwotICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KIHZv
aWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7Ci0g
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOworICAgIG1faW1hZ2VSZXN1
bHQgPSBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCkKQEAgLTI2NSwyODMgKzIxOCw1OCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVy
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbCht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkp
OwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKKyAgICBpZiAobV9pbWFnZVJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4iCisgICAgICAgIDw8
ICIgRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZVJlc3VsdC0+aW1hZ2VCdWZmZXJJ
ZkV4aXN0cygpLmdldCgpCisgICAgICAgIDw8ICIgRXhpc3RpbmcgcHJlbXVsdGlwbGllZCBpbWFn
ZSBkYXRhICIgPDwgVmFsdWVPck51bGwobV9pbWFnZVJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAgIDw8
ICIgRXhpc3RpbmcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbCht
X2ltYWdlUmVzdWx0LT5pbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpLmdldCgpKSk7CiAKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVu
ZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2Up
OwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5h
dGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgcmV0dXJuIG1faW1hZ2VSZXN1bHQtPmltYWdlQnVmZmVy
KCk7CiB9CiAKIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRp
cGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURh
dGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQo
KmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAg
ICByZXR1cm4gbV9pbWFnZVJlc3VsdCA/IG1faW1hZ2VSZXN1bHQtPmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDog
bnVsbHB0cjsKIH0KIAogUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnBy
ZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2Nh
bGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFp
bWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURh
dGE7CisgICAgcmV0dXJuIG1faW1hZ2VSZXN1bHQgPyBtX2ltYWdlUmVzdWx0LT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFj
ZSkgOiBudWxscHRyOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVj
dChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
LSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAg
ICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYg
bm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54
KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5h
dGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkg
PD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0
LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAg
ICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50
IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6
ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAg
ICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAg
aWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlP
cmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAg
IGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4p
ICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAq
IDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0
OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAo
KHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWlu
dDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5
RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6
ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAg
ICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNp
emVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0g
ICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQot
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRo
KCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dC
eXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhf
dCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBl
bmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgp
OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgp
OwotCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJj
ZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAg
IH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2Up
CiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXpl
LndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
LSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVz
dC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQot
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
LSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2Vu
ZGlmCi19CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotUmVmUHRyPEltYWdlRGF0YT4gRmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZURhdGEmIGlucHV0RGF0YSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCi17Ci0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3Qo
SW50UG9pbnQoKSwgaW5wdXREYXRhLnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxl
KDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAg
Ly8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIEltYWdlRGF0YQotICAg
IGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIu
cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBi
dWZmZXItPnB1dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIGlucHV0RGF0YSwgZGVzdGluYXRpb25S
ZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENv
bG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgb3V0cHV0Rm9ybWF0KTsKLX0KKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIgorICAgICAgICA8PCAiIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VSZXN1bHQtPmltYWdlQnVmZmVySWZFeGlzdHMoKS5nZXQoKQorICAgICAgICA8PCAiIEV4aXN0
aW5nIHByZW11bHRpcGxpZWQgaW1hZ2UgZGF0YSAiIDw8IFZhbHVlT3JOdWxsKG1faW1hZ2VSZXN1
bHQtPmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpLmdldCgpKQorICAgICAgICA8PCAiIEV4aXN0aW5nIHVucHJlbXVsdGlwbGllZCBpbWFnZSBk
YXRhICIgPDwgVmFsdWVPck51bGwobV9pbWFnZVJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS5nZXQoKSkpOwogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0
QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCkKLXsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFNpemUocmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRo
IHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UpOwotICAgIGlmICghY29udmVydGVkQnVmZmVy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9u
IGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRv
IGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
aW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldEltYWdl
RGF0YShvdXRwdXRGb3JtYXQsIHJlY3QpOworICAgIG1faW1hZ2VSZXN1bHQtPmNvcHlJbWFnZURh
dGEoZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
cmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKIHsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV9pbWFnZUJ1
ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZElt
YWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9p
bWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQorICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRo
ZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBk
ZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlRGF0
YVRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VC
eXRlcygqY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7
Ci19CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoKS4iCisgICAgICAgIDw8ICIgRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIg
PDwgbV9pbWFnZVJlc3VsdC0+aW1hZ2VCdWZmZXJJZkV4aXN0cygpLmdldCgpCisgICAgICAgIDw8
ICIgRXhpc3RpbmcgcHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhICIgPDwgVmFsdWVPck51bGwobV9p
bWFnZVJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAgIDw8ICIgRXhpc3RpbmcgdW5wcmVtdWx0aXBsaWVk
IGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbChtX2ltYWdlUmVzdWx0LT5pbWFnZURhdGFJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLmdldCgpKSk7CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0g
ICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJl
c3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsK
LQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNv
bG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNv
bnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRT
aXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIG1faW1hZ2VSZXN1bHQtPmNvcHlJbWFnZURh
dGEoZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJl
Y3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZp
bHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHQoKQogewogICAgIEFTU0VSVCho
YXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQuZ2V0KCkpKTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAg
ICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0g
ICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWly
ZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAg
ICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Y29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0
aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JT
cGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBtX2ltYWdlUmVzdWx0
LT5jb3JyZWN0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmls
dGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCkBAIC01NTAsMTIgKzI3OCw4IEBA
IEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAog
ICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNS
ZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICBtX2ltYWdl
UmVzdWx0ID0gRmlsdGVySW1hZ2U6OmNyZWF0ZUltYWdlQnVmZmVyKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxl
KCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyUmVzdWx0KCk7
CiB9CiAKIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpCkBAIC01NjQsMTQgKzI4OCw4IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlw
ZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1
bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKLSAgICByZXR1cm4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBtX2ltYWdlUmVzdWx0ID0gRmls
dGVySW1hZ2U6OmNyZWF0ZUltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdN
b2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAg
cmV0dXJuIG1faW1hZ2VSZXN1bHQgPyBtX2ltYWdlUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSA6IG51bGxwdHI7CiB9CiAKIEltYWdlRGF0
YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQpAQCAtNTgw
LDUwICsyOTgsMTQgQEAgSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHJlc3Vs
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNJ
bWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGRzdENvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3Bh
Y2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9u
IHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFO
RCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRz
dENvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkc3RDb2xvclNwYWNlOwotI2Vs
c2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRl
ZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCisgICAgbV9pbWFnZVJlc3VsdCA9IEZpbHRlckltYWdlOjpjcmVhdGVJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gbV9pbWFnZVJlc3Vs
dCA/IG1faW1hZ2VSZXN1bHQtPmltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQogewot
I2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGlu
dGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBp
ZiAoIWhhc1Jlc3VsdCgpIHx8IGRzdENvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50
aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAv
LyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGll
ZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZSht
X3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNw
YWNlID0gZHN0Q29sb3JTcGFjZTsKLQotICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KQotICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbnVsbHB0cjsKLSNlbmRpZgorICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAg
bV9pbWFnZVJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRzdENvbG9yU3BhY2UpOwogfQog
CiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCAwYTEwMmQ4Y2RmZTBkZGMxZDczZTk0Y2Y3YmUxZWI0YjBlMjBlYWM4
Li4zYTdhMzExM2I3NTg0ODhmNWQyMmE0YjA5ODZkNTc1NGUxODQ4YmQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxw
b3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXI7
CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXJJbWFnZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOwogY2xhc3MgSW1hZ2VEYXRhOwogCkBAIC04NiwxOCArODgsMTMgQEAgcHVibGljOgogICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7CiAg
ICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBX
VEY6Om51bGxvcHQpOwogICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlw
bGllZFJlc3VsdCgpOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyBy
ZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVu
c2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0
IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdDsKICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1
bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9y
bSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5
IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAg
ICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KKyAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVzdWx0OyB9CiAKICAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKQEAg
LTExNywxMSArMTE0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBseSgpOwogCi0gICAgLy8g
Q29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBv
ZiBhIGZpbHRlciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1
cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1
bHQuCi0gICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVl
ZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKSB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwogCiAgICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVj
dFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQpAQCAtMTg4
LDMyICsxODAsMTkgQEAgcHJvdGVjdGVkOgogICAgIEltYWdlRGF0YSogY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKICAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkg
b3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKKyAgICAvLyBSZXR1
cm4gZmFsc2UgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFs
aWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNv
bG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEg
cHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNoZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQg
Y29ycmVjdCBpZiBuZWNlc3NhcnkuCi0gICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpOworICAgIHZpcnR1YWwgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQ
aXhlbHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgPSAwOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJ
bWFnZURhdGFUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgSW1hZ2VEYXRhJiwgRGVz
dGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgYm9vbCByZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNvbnZl
cnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBJbWFnZURhdGEm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBjb252ZXJ0
SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICAKLQogICAg
IEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3Rz
OwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlcklt
YWdlPiBtX2ltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0Owog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDM3Y2QzNzJhYTY0NjgwMzhiMGM0Nzk0
ZTA1NjBhNjY5ZjI4MGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSw0MDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVy
SW1hZ2U6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKGxvZ2ljYWxTaXplLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobG9naWNhbFNpemUpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1h
Z2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKK30KKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0
ZXJJbWFnZTo6Y3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCit7CisgICAgaWYgKGxvZ2ljYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dp
Y2FsU2l6ZSkpOworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IGxvZ2ljYWxTaXplOworICAgIHNj
YWxlZFNpemUuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKHNjYWxlZFNpemUpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlckltYWdl
KFdURk1vdmUoaW1hZ2VEYXRhKSwgYWxwaGFGb3JtYXQsIHJlbmRlcmluZ01vZGUsIHsgbG9naWNh
bFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4IH0p
KTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBp
bWFnZUJ1ZmZlcikKKyAgICA6IG1faW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpCit7
CisgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXIpOworICAgIG1fcmVuZGVyaW5nTW9kZSA9IG1faW1h
Z2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKTsKKyAgICBtX3BhcmFtZXRlcnMgPSBtX2ltYWdlQnVm
ZmVyLT5wYXJhbWV0ZXJzKCk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShSZWZQdHI8
SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5n
TW9kZSkKKyAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQoreworICAgIEFTU0VSVChpbWFn
ZURhdGEpOworICAgIGltYWdlRGF0YUlmRXhpc3RzKGFscGhhRm9ybWF0KSA9IFdURk1vdmUoaW1h
Z2VEYXRhKTsKK30KKworSW1hZ2VCdWZmZXIqIEZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcigpCit7
CisgICAgaWYgKG1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdl
dCgpOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9wYXJhbWV0
ZXJzLmxvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNvbHV0aW9u
U2NhbGUsIG1fcGFyYW1ldGVycy5jb2xvclNwYWNlKTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6
Onplcm8oKSwgSW50U2l6ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH07CisKKyAgICBpZiAo
aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkp
CisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgKmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9CisKK3N0
YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYg
aW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9
IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNy
Yy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUu
aGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5o
ZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVz
OworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRh
dGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9u
ZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21w
b25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAgd2hpbGUg
KHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21w
b25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICog
YWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0
OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQor
CitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dC
eXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOwor
ICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1
dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAg
ZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJv
d0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0
aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3Vy
Y2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNv
dXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAg
dWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkg
KiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwor
ICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAg
ICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCAr
PSA0OworICAgIH0KKyNlbmRpZgorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiYgRmlsdGVySW1hZ2U6
OmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7
CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIDogbV9wcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhOworfQorCitJbWFnZURhdGEqIEZpbHRlckltYWdlOjppbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICBhdXRvJiBpbWFnZURhdGEgPSBp
bWFnZURhdGFJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAg
ICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKKyAgICAKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikg
eworICAgICAgICBpbWFnZURhdGEgPSBtX2ltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoYWxwaGFG
b3JtYXQsIHsgSW50UG9pbnQoKSwgSW50U2l6ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH0p
OworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhLmdldCgpOworICAgIH0KKyAgICAKKyAgICBJbnRT
aXplIHNjYWxlZFNpemUobV9wYXJhbWV0ZXJzLmxvZ2ljYWxTaXplKTsKKyAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6
ZS5zY2FsZShtX3BhcmFtZXRlcnMucmVzb2x1dGlvblNjYWxlKTsKKworICAgIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKHNjYWxlZFNpemUpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSgqaW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKS0+ZGF0YSgpLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIGVs
c2UKKyAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqaW1hZ2VEYXRhSWZFeGlzdHMo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgKmltYWdlRGF0
YS0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKworICAgIHJldHVybiBpbWFnZURhdGEuZ2V0KCk7Cit9
CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBP
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6
ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3BhcmFt
ZXRlcnMucmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFt
cGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgpICogNCku
dW5zYWZlR2V0KCkpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGNvcHlJbWFnZURhdGEoKmltYWdlRGF0YSwgYWxwaGFGb3JtYXQsIHJlY3QsIGNv
bG9yU3BhY2UpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6
OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29u
dmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAg
ICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJl
dHVybiBjb2xvclNwYWNlICYmIG1fcGFyYW1ldGVycy5jb2xvclNwYWNlICE9ICpjb2xvclNwYWNl
OworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90
IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxl
ZFJlY3QocmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3BhcmFtZXRlcnMucmVzb2x1dGlv
blNjYWxlKTsKKyAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX3BhcmFtZXRlcnMubG9naWNh
bFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3BhcmFtZXRlcnMucmVzb2x1dGlv
blNjYWxlKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFy
ZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlm
IChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3Qu
bWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBz
Y2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRh
KCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0
aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzY2Fs
ZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVj
dC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdp
biA9IHNjYWxlZFJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4g
PCAwKSB7CisgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOwor
ICAgIH0KKyAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUu
d2lkdGgoKTsKKworICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAgaW50IHlE
ZXN0ID0gMDsKKyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdp
bjsKKyAgICAgICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2NhbGVkUmVj
dC5tYXhZKCk7CisgICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4
RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVk
UmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNp
emUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0
aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsK
KyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmln
aW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGls
ZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNv
dXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlv
blNjYW5saW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAg
ICAgKyt5T3JpZ2luOworICAgIH0KK30KKworUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVySW1hZ2U6
OmdldENvbnZlcnRlZEltYWdlRGF0YShJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9yZW5kZXJpbmdNb2Rl
LCBtX3BhcmFtZXRlcnMucmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKKyAgICBpZiAoIWNv
bnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBDb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBv
bmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGNv
bnZlcnRlZEltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoYWxwaGFGb3JtYXQsIHJlY3QpOworfQor
CitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkSW1hZ2VEYXRhKElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50
UG9pbnQoKSwgaW1hZ2VEYXRhLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9wYXJhbWV0
ZXJzLnJlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFn
ZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICBhdXRvIGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCBtX3Bh
cmFtZXRlcnMucmVzb2x1dGlvblNjYWxlLCBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSk7CisgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbWFnZUJ1
ZmZlci0+cHV0SW1hZ2VEYXRhKGFscGhhRm9ybWF0LCBpbWFnZURhdGEsIHJlY3QpOworICAgIHJl
dHVybiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVj
dCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZURhdGEoVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgYXV0byYgaW1hZ2VEYXRhID0gaW1hZ2VEYXRhSWZF
eGlzdHMoYWxwaGFGb3JtYXQpOworCisgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyICYmIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJv
KCksIEludFNpemUobV9wYXJhbWV0ZXJzLmxvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgaWYg
KGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKCptX2ltYWdl
QnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAg
IGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHNyY1JlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW1h
Z2VEYXRhID0gdGhpcy0+aW1hZ2VEYXRhKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAo
IWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRh
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29u
dmVydGVkSW1hZ2VEYXRhID0gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKCppbWFnZURhdGEsIGFscGhh
Rm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVy
dGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKCppbWFnZURhdGEtPmRhdGEoKSwgZGVz
dGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSgpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBs
aWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisg
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
LT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwor
ICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7CisKKyAgICAv
LyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMK
KyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAg
IHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4
M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBi
eSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgo
cGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgo
c2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAg
IHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNp
eHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAg
ICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAg
ICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhl
bCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBp
eGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRl
IG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21w
b25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAg
ICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3Qg
YSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRv
IGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQor
ICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3Bp
eGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisg
ICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAg
IFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0g
bV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1F
OiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBj
b252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0
IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zv
cm1Db2xvclNwYWNlKG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAg
IG1fcGFyYW1ldGVycy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlw
bGllZEltYWdlRGF0YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0g
bnVsbHB0cjsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTYyY2NjNDYwMjY2NjNkZWNiYjEzMjQ5NTA0M2Q2YWIwOTFmYjVmYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlcklt
YWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICBzdGF0aWMgUmVm
UHRyPEZpbHRlckltYWdlPiBjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CisgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiYgaW1h
Z2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgSW1hZ2VEYXRhKiBp
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgdm9pZCBjb3B5SW1hZ2VEYXRhKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRJbWFnZURhdGEoKTsKKyAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcml2YXRlOgorICAgIEZpbHRlckltYWdlKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mJik7CisgICAgRmlsdGVySW1hZ2UoUmVmUHRyPEltYWdlRGF0YT4mJiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpQYXJhbWV0ZXJzJik7CisKKyAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAgdm9pZCBj
b3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKyAgICAKKyAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPEltYWdlRGF0YT4g
bV91bnByZW11bHRpcGxpZWRJbWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwor
ICAgIEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc4OWE4OWM1NDMyZWY4
ZTMyZjkwNGUzNDcwM2FmMjUwNDgzYTU3MTAuLjYyYTliYzE1MTdjNDJkOWY5OWFiYThiODIwM2Fm
Y2I0NjdiZTQ1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNzAsNyArMjcwLDYgQEAgdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkg
ewogICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwog
ICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwog
ICAgICAgICB9CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsK
QEAgLTMxNSw3ICszMTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRp
dmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICAvLyBv
ciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1pdHZlLT5z
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsK
KyAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgICAgICAvLyBS
ZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYz
MDg3Yjk0Li4zM2E5NzUxYWZiZDg2ZDEyNmQ4ZjllNjQyMjIyMjkwZWNkN2I2MWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmNwcApAQCAtOTIsMTUgKzkyLDQgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVh
ckVmZmVjdHMoKQogICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewot
ICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZm
ZWN0LT5jbGVhclJlc3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVu
Y2UpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUw
OGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNzFiMmQ5ZTI3NTA4OWI1NTMxODc2
OTcyOGE3NjQ3ZjQxYTUxMTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJs
aWM6CiAgICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiAg
ICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShG
aWx0ZXJFZmZlY3QqKTsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZm
ZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427193</attachid>
            <date>2021-04-27 14:00:51 -0700</date>
            <delta_ts>2021-04-27 19:56:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210427140050.patch</filename>
            <type>text/plain</type>
            <size>60779</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmOGIwOWZhMTdjM2Fl
YzhhYTE2NWRkZDNkZWJlMGQ5NTI0MTQ2Yy4uYTM0N2U4YTczNmU2NTVhNDI4YjRjYmE1YWZhZGM0
NmM4ZjM2YWY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDIxLTA0LTI3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
UmVzdWx0JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSB0aGUgc3RvcmFnZSBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9m
IGFwcGx5aW5nIHRoZQorICAgICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5l
dyBjYWxscyBuYW1lZCAnRmlsdGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBp
bnRlZ3JhdGluZworICAgICAgICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHksIHNpbXBsaWZ5aW5n
IHRoZSBnZW9tZXRyeSBjYWxjdWxhdGlvbiBhbmQgc2F2aW5nCisgICAgICAgIG1lbW9yeSBmb3Ig
RmlsdGVyRWZmZWN0IHdoaWNoIGN1cnJlbnRseSByZXF1aXJlcyBhbGxvY2F0aW5nIG1lbW9yeSBm
b3IKKyAgICAgICAgdGhlIG1heEVmZmVjdFJlY3QoKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAg
ICAgICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0
aGUgb3Bwb3NpdGUgCisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVs
cygpLiBDb3JyZWN0aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJl
IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgIENvcnJlY3QgdGhlIHByZW11bHRpcGxpZWQgcmVzdWx0IGlmIG5lZWRl
ZC4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6CisgICAg
ICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUgYnkgbnVsbGlmeWluZyBhIHNpbmds
ZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVy
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFU
b0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdlcmUgbW92ZWQgdG8gRmlsdGVyUmVz
dWx0LmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5
aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjppbWFnZURhdGFJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNvcHlJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVySWZFeGlzdHMp
OgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQg
cmVjdXJzaXZlbHkgY2FuIGJlIGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCiAyMDIxLTA0LTI2ICBB
bGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbV2ViSURM
XSBSZW1vdmUgW0NhbGxOYW1lZFNldHRlck9ubHlGb3JTdXBwb3J0ZWRQcm9wZXJ0aWVzXSBleHRl
bmRlZCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMGI0OGMxMWQzYTJmZDc4ZjFjYzg5ODA2
M2FmMzI3NWU4MmQ0NjM5My4uZTAwMTRhNTk3MTViZjk5ZmFiZmM5NTFiOGFlYjQxNmU4NDlhY2Iy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTYsNiArMjA1Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU5NTE0YjU5NjJhOGMzZjgyNTBmN2JlMTkxOWJmMjJmMjUwNzcwZjQuLjA4ZDgw
NTdlZDFiMzM2MzU3NmFhOWFkNmM4MGE4ODBlNGQwNWVkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkz
LDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ5MzgsNiArMjQ5NDAsOCBAQAogCQkJ
CTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0
OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJ
NDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3
MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5
MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQx
MjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0
RTAwNTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYw
QjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4
IDRkMjI4ZjkwNWIyMGZiOTEzYWRkZmJkYmQyOTg5OWI0ODgxZjZkYTkuLjg1MmQ4ODJmNDc0ZGU0
MDFjYWEzMzAwMDZjOTczYzQ2ZGFlZWRiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC04NywxNCAr
ODcsNiBAQCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkK
LXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19
Ci0gICAgCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5z
aWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUs
IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2
YWVhMGMzLi4xZmEwY2IzYTYzNzNlNTNkNWRlZjNkZDRlM2I2ZTM3MDc0M2FhNWNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCkBAIC01OCwxNiArNTgsMTMgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3Qg
eyByZXR1cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0g
ICAgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZh
dGU6CiAgICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lk
IGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIG1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKICAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1MTM1MjFlYTRjYTViYTkw
NGYyZDYwNWRmOTlhNDRhMDQuLjM5OGM0NzMxMjJjOTRiZThlYjhkYmFjOTk0YTRkYTVlNjU4NDBm
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgpAQCAtMzUsMTQgKzM1LDYgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCkBAIC0xODYsNjkgKzE3OCwyMSBAQCB2b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoKQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWlyZXNWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3RzKSB7CisgICAgICAgICAg
ICBpZiAoIWluLT5tYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGluLT5jb3JyZWN0UHJlbXVsdGlwbGll
ZFJlc3VsdCgpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gQWRkIHBsYXRmb3Jt
IHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KICAgICBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11
bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVs
cy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+
ZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdCgpCiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBudWxscHRyOworICAgIG1fZmlsdGVyUmVzdWx0ID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCkBAIC0yNjUsMjgzICsyMDks
NTggQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdl
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFn
ZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxs
KG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsKLQotICAgIGlmICghaGFzUmVzdWx0
KCkpCisgICAgaWYgKG1fZmlsdGVyUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAg
ICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwg
IiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiIKKyAgICAgICAgPDwgIiBFeGlzdGluZyBpbWFnZSBidWZm
ZXIgIiA8PCBtX2ZpbHRlclJlc3VsdC0+aW1hZ2VCdWZmZXJJZkV4aXN0cygpLmdldCgpCisgICAg
ICAgIDw8ICIgRXhpc3RpbmcgcHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhICIgPDwgVmFsdWVPck51
bGwobV9maWx0ZXJSZXN1bHQtPmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpLmdldCgpKQorICAgICAgICA8PCAiIEV4aXN0aW5nIHVucHJlbXVs
dGlwbGllZCBpbWFnZSBkYXRhICIgPDwgVmFsdWVPck51bGwobV9maWx0ZXJSZXN1bHQtPmltYWdl
RGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkuZ2V0
KCkpKTsKIAotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgaWYgKCFtX2ltYWdl
QnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVz
dGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
ZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsK
KyAgICByZXR1cm4gbV9maWx0ZXJSZXN1bHQtPmltYWdlQnVmZmVyKCk7CiB9CiAKIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3Qg
SW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2NhbGVkU2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwg
Y29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICByZXR1cm4gbV9maWx0ZXJS
ZXN1bHQgPyBtX2ZpbHRlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSkgOiBudWxscHRyOwogfQogCiBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dChjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCiB7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAg
c2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdl
RGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRT
aXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0
YSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgc2NhbGVkUmVjdC5z
Y2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGlu
YXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRo
ZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8
IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0
KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAgLy8g
RWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3Vy
Y2UuCi0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkg
PD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsK
LSAgICBpZiAoeE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAg
ICAgeE9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7
Ci0gICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0
LnkoKTsKLSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAg
ICB5RGVzdCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50
IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9u
U2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgo
KSkgKyB4RGVzdCkgKiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNl
LmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4p
ICogNDsKLQotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHkoZGVz
dGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJj
ZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBj
b3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUu
d2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBp
bnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwot
ICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0g
ICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0g
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJj
ZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlu
cHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21w
b25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKKyAgICByZXR1cm4gbV9m
aWx0ZXJSZXN1bHQgPyBtX2ZpbHRlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpIDogbnVsbHB0cjsKIH0K
IAotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFNpemUmIGlucHV0U2l6ZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwg
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsK
LQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
b3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRo
ID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQg
PSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkg
ewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChh
bHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQorICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7CiAKLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29u
dmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29s
b3JTcGFjZSwgSW1hZ2VEYXRhJiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0KQotewotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlu
cHV0RGF0YS5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJ
bWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBJbWFnZURhdGEKLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0
dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVm
ZmVyLCBkZXN0aW5hdGlvblJlY3QsIG91dHB1dEZvcm1hdCk7Ci19CisgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiIKKyAg
ICAgICAgPDwgIiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ZpbHRlclJlc3VsdC0+aW1h
Z2VCdWZmZXJJZkV4aXN0cygpLmdldCgpCisgICAgICAgIDw8ICIgRXhpc3RpbmcgcHJlbXVsdGlw
bGllZCBpbWFnZSBkYXRhICIgPDwgVmFsdWVPck51bGwobV9maWx0ZXJSZXN1bHQtPmltYWdlRGF0
YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLmdldCgpKQor
ICAgICAgICA8PCAiIEV4aXN0aW5nIHVucHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhICIgPDwgVmFs
dWVPck51bGwobV9maWx0ZXJSZXN1bHQtPmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkuZ2V0KCkpKTsKIAotUmVmUHRyPEltYWdlRGF0YT4g
RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29u
c3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCi17
Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVj
dCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVy
c2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFt
cGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
LCB0YXJnZXRDb2xvclNwYWNlKTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGlu
dGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0g
ICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVy
LCByZWN0KTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRJbWFnZURhdGEob3V0cHV0
Rm9ybWF0LCByZWN0KTsKKyAgICBtX2ZpbHRlclJlc3VsdC0+Y29weUltYWdlRGF0YShkZXN0aW5h
dGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xv
clNwYWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQog
ewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0
LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0g
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVy
UmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1
dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0
aW9uLCBkZXN0UmVjdCk7Ci19CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3Rv
cmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9u
Ci0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNw
YWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZl
cnRlZEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252
ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KKyAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdCgpLiIKKyAgICAgICAgPDwgIiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ZpbHRl
clJlc3VsdC0+aW1hZ2VCdWZmZXJJZkV4aXN0cygpLmdldCgpCisgICAgICAgIDw8ICIgRXhpc3Rp
bmcgcHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhICIgPDwgVmFsdWVPck51bGwobV9maWx0ZXJSZXN1
bHQtPmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpLmdldCgpKQorICAgICAgICA8PCAiIEV4aXN0aW5nIHVucHJlbXVsdGlwbGllZCBpbWFnZSBk
YXRhICIgPDwgVmFsdWVPck51bGwobV9maWx0ZXJSZXN1bHQtPmltYWdlRGF0YUlmRXhpc3RzKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkuZ2V0KCkpKTsKIAotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCku
IEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwg
ICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOwotCi0gICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsK
LSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBk
ZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9maWx0ZXJSZXN1bHQtPmNvcHlJbWFnZURhdGEoZGVz
dGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNv
bG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBP
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVm
ZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHQoKQogewogICAgIEFTU0VSVChoYXNSZXN1
bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJF
ZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51
bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0
KCkpKTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFn
ZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAg
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xv
clNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhp
bnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihj
b2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBtX2ZpbHRlclJlc3VsdC0+Y29y
cmVjdFByZW11bHRpcGxpZWRJbWFnZURhdGEoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNTUwLDEyICsyNjksOCBAQCBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICAv
LyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0
KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5k
ZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7
Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgbV9maWx0ZXJSZXN1
bHQgPSBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlQnVmZmVyKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCks
IG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyUmVzdWx0KCk7CiB9
CiAKIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpCkBAIC01NjQsMTQgKzI3OSw4IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBp
cyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRT
aXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBtX2ZpbHRlclJlc3VsdCA9IEZpbHRl
clJlc3VsdDo6Y3JlYXRlSW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gbV9maWx0ZXJSZXN1bHQgPyBtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgOiBudWxscHRyOwogfQogCiBJbWFnZURh
dGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKQEAgLTU4
MCw1MCArMjg5LDE0IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dl
ZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
SW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBkc3RDb2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lv
biB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAvLyBB
TkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBk
c3RDb2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZHN0Q29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgorICAgIG1fZmlsdGVyUmVzdWx0ID0gRmlsdGVyUmVzdWx0OjpjcmVh
dGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gbV9maWx0ZXJS
ZXN1bHQgPyBtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGRzdENvbG9yU3BhY2Up
CiB7Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVu
dHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7Ci0jZWxzZQot
ICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZHN0Q29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBw
b3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZwot
ICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0
aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Db2xvclNw
YWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENv
bG9yU3BhY2UgPSBkc3RDb2xvclNwYWNlOwotCi0gICAgaWYgKG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCi0gICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOwotICAg
IGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBudWxscHRyOwotI2VuZGlmCisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
KyAgICBtX2ZpbHRlclJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRzdENvbG9yU3BhY2Up
OwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaAppbmRleCAwYTEwMmQ4Y2RmZTBkZGMxZDczZTk0Y2Y3YmUxZWI0YjBl
MjBlYWM4Li5kZGZmZWE5ZWVhZDg5NjAxZjdiYjdhMWQ2ODlmMjg3ODNiZDhjN2YyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
aWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXJSZXN1bHQ7CiBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKIApAQCAtODYsMTggKzg4LDEzIEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29u
c3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBXVEY6Om51bGxv
cHQpOwogICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gV1RGOjpudWxsb3B0KTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgY29ycmVjdFBy
ZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVm
ZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
KSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KICAgICB1bnNpZ25lZCB0
b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7CiAgICAgCi0gICAgaW5saW5lIGJvb2wg
aGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMg
cGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3Qg
ZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAgICB8
fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9CisgICAgaW5saW5lIGJvb2wgaGFz
UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZXN1bHQ7IH0KIAogICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJ
bnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwpAQCAtMTE3LDExICsxMTQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KCk7CiAK
LSAgICAvLyBDb3JyZWN0IGFueSBpbnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUg
cmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZp
bmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIg
ZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCk7CiAKICAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmls
dGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9
CkBAIC0xODgsMzIgKzE4MCwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdp
bGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAorICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBB
YnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSA9IDA7CiAKLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNv
bnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURh
dGEmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNp
b24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0
YT4gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIElt
YWdlRGF0YSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIElt
YWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAg
IAotCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1
dEVmZmVjdHM7CiAKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7
Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8
RmlsdGVyUmVzdWx0PiBtX2ZpbHRlclJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBh
aW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmRjYjdhMGI5ODE1
OWNmODU3MDM4ZTQ5NjZjMzBjNTE3NTgxYWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCkBAIC0wLDAg
KzEsNDE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVk
ZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7
CisgICAgaWYgKGxvZ2ljYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
bG9naWNhbFNpemUpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
OworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0KFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7
Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlclJlc3VsdDo6Y3JlYXRlSW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKGxvZ2ljYWxT
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IGxvZ2ljYWxTaXplOworICAgIHNjYWxlZFNpemUuc2NhbGUocmVzb2x1dGlv
blNjYWxlKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNjYWxlZFNp
emUpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdChXVEZNb3ZlKGltYWdlRGF0YSksIGFs
cGhhRm9ybWF0LCByZW5kZXJpbmdNb2RlLCB7IGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCB9KSk7Cit9CisKK0ZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKKyAgICA6IG1f
aW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpCit7CisgICAgQVNTRVJUKG1faW1hZ2VC
dWZmZXIpOworICAgIG1fcmVuZGVyaW5nTW9kZSA9IG1faW1hZ2VCdWZmZXItPnJlbmRlcmluZ01v
ZGUoKTsKKyAgICBtX3BhcmFtZXRlcnMgPSBtX2ltYWdlQnVmZmVyLT5wYXJhbWV0ZXJzKCk7Cit9
CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KFJlZlB0cjxJbWFnZURhdGE+JiYgaW1hZ2VE
YXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFyYW1l
dGVycykKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9wYXJh
bWV0ZXJzKHBhcmFtZXRlcnMpCit7CisgICAgQVNTRVJUKGltYWdlRGF0YSk7CisgICAgaW1hZ2VE
YXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpID0gV1RGTW92ZShpbWFnZURhdGEpOworfQorCitJbWFn
ZUJ1ZmZlciogRmlsdGVyUmVzdWx0OjppbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKG1faW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworCisgICAgbV9pbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9wYXJhbWV0ZXJzLmxvZ2ljYWxTaXplLCBt
X3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUsIG1fcGFyYW1ldGVy
cy5jb2xvclNwYWNlKTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH07CisKKyAgICBpZiAoaW1hZ2VEYXRhSWZFeGlzdHMo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqaW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCksIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YUlmRXhp
c3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCksIHJlY3QpOworCisg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVt
dWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lm
IFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgp
ICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6
ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3Jj
LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0
LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUu
aGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
KyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEo
KTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8
IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNd
ID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQor
eworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53
aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Cisg
ICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAg
ICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1
dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3Qu
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAg
ICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3Vy
Y2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChp
bnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRp
b25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBv
bmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Cisg
ICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAv
IGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRp
ZgorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiYgRmlsdGVyUmVzdWx0OjppbWFnZURhdGFJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3Vu
cHJlbXVsdGlwbGllZEltYWdlRGF0YSA6IG1fcHJlbXVsdGlwbGllZEltYWdlRGF0YTsKK30KKwor
SW1hZ2VEYXRhKiBGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3Rz
KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhLmdldCgpOworICAgIAorICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGltYWdl
RGF0YSA9IG1faW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIHJldHVy
biBpbWFnZURhdGEuZ2V0KCk7CisgICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZSht
X3BhcmFtZXRlcnMubG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcGFyYW1l
dGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCks
ICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKCppbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNjYWxl
ZFNpemUpOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJSZXN1bHQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
Y2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3BhcmFtZXRlcnMucmVzb2x1dGlv
blNjYWxlKTsKKworICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOwor
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlJ
bWFnZURhdGEoKmltYWdlRGF0YSwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAg
IHJldHVybiBpbWFnZURhdGE7Cit9CisKK2Jvb2wgRmlsdGVyUmVzdWx0OjpyZXF1aXJlc0ltYWdl
RGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBk
ZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFj
ZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24g
d2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5E
IDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29s
b3JTcGFjZSAmJiBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNl
CisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQg
b24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChy
ZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUp
OworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSk7
CisgICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxh
Y2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxl
ZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkg
PiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBh
aW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwg
ZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0
IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3Qu
bWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+
PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2Nh
bGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsK
KyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQor
ICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
OworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAw
OworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAg
ICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFko
KTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVu
ZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4
T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0Lndp
ZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0
YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3Jp
Z2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4
ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2Nhbmxp
bmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lP
cmlnaW47CisgICAgfQorfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJSZXN1bHQ6OmdldENv
bnZlcnRlZEltYWdlRGF0YShJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9yZW5kZXJpbmdNb2Rl
LCBtX3BhcmFtZXRlcnMucmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKKyAgICBpZiAoIWNv
bnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBDb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBv
bmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGNv
bnZlcnRlZEltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoYWxwaGFGb3JtYXQsIHJlY3QpOworfQor
CitSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZEltYWdlRGF0YShJ
bWFnZURhdGEmIGltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCBy
ZWN0KEludFBvaW50KCksIGltYWdlRGF0YS5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAvIG1f
cGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgSW1hZ2VEYXRhCisgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fcmVuZGVyaW5nTW9k
ZSwgbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2Up
OworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
aW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShhbHBoYUZvcm1hdCwgaW1hZ2VEYXRhLCByZWN0KTsK
KyAgICByZXR1cm4gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3Jt
YXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdl
RGF0YShVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvJiBpbWFnZURhdGEgPSBpbWFn
ZURhdGFJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisKKyAgICBpZiAoIWltYWdlRGF0YSkgeworICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9p
bnQ6Onplcm8oKSwgSW50U2l6ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUpIH07CisgICAgICAg
ICAgICBpZiAoYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEo
Km1faW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAg
ICAgICAgICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpbWFnZURhdGEgPSB0aGlzLT5pbWFnZURhdGEoYWxwaGFGb3JtYXQpOworICAgIH0KKwor
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNJ
bWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAo
YXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoKmltYWdlRGF0
YSwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVz
KCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMoKmltYWdlRGF0YS0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3Jy
ZWN0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHBy
ZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBw
aXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZURhdGEpCisgICAgICAgIHJldHVy
bjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+
ZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7
CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Cisg
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytw
aXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAg
ICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojp0cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYg
VVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJu
YWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xv
clNwYWNlID09IG1fcGFyYW1ldGVycy5jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1h
Z2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zv
cm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZl
ci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSwgY29sb3JTcGFj
ZSk7CisKKyAgICBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91
bnByZW11bHRpcGxpZWRJbWFnZURhdGEgPSBudWxscHRyOworICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlRGF0YSA9IG51bGxwdHI7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhhNWUyYWIyYmJjZGE3M2JjMWQ0YzkwYmE1OGE0NmEy
OTM1ZGMwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKKworY2xh
c3MgRmlsdGVyUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyUmVzdWx0PiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJSZXN1bHQ+IGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJS
ZXN1bHQ+IGNyZWF0ZUltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VC
dWZmZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+JiBpbWFnZURhdGFJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBJbWFnZURhdGEqIGltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBPcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGNv
cHlJbWFnZURhdGEoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IFdURjo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSgpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVyUmVzdWx0KFJlZlB0cjxJbWFnZUJ1ZmZl
cj4mJik7CisgICAgRmlsdGVyUmVzdWx0KFJlZlB0cjxJbWFnZURhdGE+JiYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIFJlbmRlcmluZ01vZGUsIGNvbnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFy
YW1ldGVycyYpOworCisgICAgYm9vbCByZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJz
aW9uKE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29w
eUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlRGF0YSYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7Cisg
ICAgCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IG1fdW5wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhOworICAgIFJlZlB0cjxJbWFnZURh
dGE+IG1fcHJlbXVsdGlwbGllZEltYWdlRGF0YTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVy
aW5nTW9kZTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OlBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3ODlh
ODljNTQzMmVmOGUzMmY5MDRlMzQ3MDNhZjI1MDQ4M2E1NzEwLi42MmE5YmMxNTE3YzQyZDlmOTlh
YmE4YjgyMDNhZmNiNDY3YmU0NTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjcwLDcgKzI3MCw2
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFz
UmVzdWx0KCkpIHsKICAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpB
cHBseWluZzsKICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBs
YXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxh
c3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0
YTo6QnVpbHQ7CkBAIC0zMTUsNyArMzE0LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAg
ICAgICAgLy8gb3Igbm9uZSBvZiB0aGVtIHdpbGwgYmUgY2hhbmdlZC4KICAgICAgICAgaWYgKCFw
cmltaXR2ZS0+c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKGVmZmVjdCwgYXR0cmlidXRlKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KGVmZmVjdCk7CisgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiAKICAg
ICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhlIHNjcmVlbi4KICAgICAgICAgbWFya0Ns
aWVudEZvckludmFsaWRhdGlvbigqb2JqZWN0RmlsdGVyRGF0YVBhaXIua2V5LCBSZXBhaW50SW52
YWxpZGF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThh
NGZkYWM0ZWFmMzA4N2I5NC4uMzNhOTc1MWFmYmQ4NmQxMjZkOGY5ZTY0MjIyMjI5MGVjZDdiNjFi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTkyLDE1ICs5Miw0IEBAIHZvaWQgU1ZHRmlsdGVyQnVp
bGRlcjo6Y2xlYXJFZmZlY3RzKCkKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCi12b2lk
IFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCkKLXsKLSAgICBpZiAoIWVmZmVjdC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLQotICAgIGZvciAoYXV0byYgcmVmZXJlbmNl
IDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNp
dmUocmVmZXJlbmNlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmlu
ZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjcxYjJkOWUyNzUw
ODliNTUzMTg3Njk3MjhhNzY0N2Y0MWE1MTEzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTYzLDcgKzYz
LDYgQEAgcHVibGljOgogICAgIGlubGluZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVj
dCk7IH0KIAogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRk
QnVpbHRpbkVmZmVjdHMoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427229</attachid>
            <date>2021-04-27 19:56:36 -0700</date>
            <delta_ts>2021-04-27 23:56:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210427195635.patch</filename>
            <type>text/plain</type>
            <size>61900</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmYxNWU3ZTg3OTkyNWMx
M2I1NjU0NmFiZjNiMTZjNjI4MTljMTdlNS4uOTgzOThiZGJmM2E4ZmQ2OTIyY2M5OWY2Mjc4YjEz
YzgwZDJmMTg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDIxLTA0LTI3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
UmVzdWx0JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSB0aGUgc3RvcmFnZSBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9m
IGFwcGx5aW5nIHRoZQorICAgICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5l
dyBjYWxscyBuYW1lZCAnRmlsdGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBp
bnRlZ3JhdGluZworICAgICAgICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHksIHNpbXBsaWZ5aW5n
IHRoZSBnZW9tZXRyeSBjYWxjdWxhdGlvbiBhbmQgc2F2aW5nCisgICAgICAgIG1lbW9yeSBmb3Ig
RmlsdGVyRWZmZWN0IHdoaWNoIGN1cnJlbnRseSByZXF1aXJlcyBhbGxvY2F0aW5nIG1lbW9yeSBm
b3IKKyAgICAgICAgdGhlIG1heEVmZmVjdFJlY3QoKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAg
ICAgICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0
aGUgb3Bwb3NpdGUgCisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVs
cygpLiBDb3JyZWN0aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJl
IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgIENvcnJlY3QgdGhlIHByZW11bHRpcGxpZWQgcmVzdWx0IGlmIG5lZWRl
ZC4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6CisgICAg
ICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUgYnkgbnVsbGlmeWluZyBhIHNpbmds
ZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVy
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFU
b0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdlcmUgbW92ZWQgdG8gRmlsdGVyUmVz
dWx0LmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5
aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjppbWFnZURhdGFJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNvcHlJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVySWZFeGlzdHMp
OgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQg
cmVjdXJzaXZlbHkgY2FuIGJlIGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCiAyMDIxLTA0LTI3ICBD
YW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQXNzb2NpYXRl
IGEgcGljdHVyZSBlbGVtZW50IHdpdGggYW4gaW1nIG9ubHkgaWYgdGhlIGltZyBpcyBhIGRpcmVj
dCBjaGlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMGI0OGMxMWQzYTJmZDc4ZjFjYzg5ODA2M2FmMzI3
NWU4MmQ0NjM5My4uZTAwMTRhNTk3MTViZjk5ZmFiZmM5NTFiOGFlYjQxNmU4NDlhY2IyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTIwNTYsNiArMjA1Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGM3OTcwMDNjODlkZDRjNmQwYTcyZTAyYTRlYTE2NjAyZTA3MGE5NjEuLjJkOWQ1ZjU5YWYz
M2I3ZjkxOTFlNGJkMjg0YTFhMTk3Y2E0MjY4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkzLDggQEAK
IAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ5MzksNiArMjQ5NDEsOCBAQAogCQkJCTQ5RUNF
QjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2
NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VC
NjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkM5MEEz
OTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2
MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4RjBC
MzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRB
QzhDIC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMwMEQz
QTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDRkMjI4
ZjkwNWIyMGZiOTEzYWRkZmJkYmQyOTg5OWI0ODgxZjZkYTkuLjg1MmQ4ODJmNDc0ZGU0MDFjYWEz
MzAwMDZjOTczYzQ2ZGFlZWRiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC04NywxNCArODcsNiBA
QCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAg
ICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAg
CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQg
Y2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMz
Li4xZmEwY2IzYTYzNzNlNTNkNWRlZjNkZDRlM2I2ZTM3MDc0M2FhNWNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5o
CkBAIC01OCwxNiArNTgsMTMgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1
cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9v
bCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
dHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6CiAg
ICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lkIGNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJl
bXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1MTM1MjFlYTRjYTViYTkwNGYyZDYw
NWRmOTlhNDRhMDQuLjQwYzEyZWI2NzM1YTlmMjVkZTcyYWYyZjBlMDIwNmE3ZjJiYTg3YWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAt
MzUsMTQgKzM1LDYgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRl
ciYgZmlsdGVyLCBUeXBlIHR5cGUpCkBAIC0xODEsNzQgKzE3MywzNCBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoKQogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgc2V0
UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0gICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
ICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVz
ICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdp
b24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWlu
dFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8
IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAg
ICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIg
YXBwbHkoKTpcbiIKKyAgICAgICAgPDwgImZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1f
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiIKKyAgICAgICAgPDwgImVmZmVjdEJvdW5k
YXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuIgorICAgICAgICA8PCAiYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8
ICJcbiIKKyAgICAgICAgPDwgImFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50
UmVjdCA8PCAiXG4iCisgICAgICAgIDw8ICJtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RS
ZWN0IDw8ICJcbiIKKyAgICAgICAgPDwgImZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkgPDwgIlxuIgorICAgICAgICA8PCAiZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2Zp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwogCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3Qu
aXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJl
c3VsdElmTmVlZGVkKCk7CisgICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQ
aXhlbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpIHsKKyAg
ICAgICAgICAgIGlmICghaW4tPm1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVt
dWx0aXBsaWVkUmVzdWx0KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBBZGQg
cGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVy
LgogICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6
Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQotewotICAgIC8vIE11c3Qgb3BlcmF0ZSBv
biBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFs
aWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFn
ZUFycmF5LT5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5s
ZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5k
IGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0K
LSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGgg
Pj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVs
QXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3Jl
bWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5Q
aXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52
YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxb
M10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4
ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4
ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7
Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsK
LQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRq
dXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4
ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwK
LSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAg
ZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9u
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
KnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFs
cGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQogdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7CisgICAgbV9maWx0ZXJSZXN1bHQgPSBudWxscHRyOwog
fQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKQEAgLTI2NSwy
ODMgKzIxNyw2MCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkK
IAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOwotCiAgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0K
LSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4iCisgICAgICAgIDw8ICIgRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9maWx0ZXJSZXN1bHQtPmltYWdlQnVmZmVySWZFeGlz
dHMoKS5nZXQoKQorICAgICAgICA8PCAiIEV4aXN0aW5nIHByZW11bHRpcGxpZWQgaW1hZ2UgZGF0
YSAiIDw8IFZhbHVlT3JOdWxsKG1fZmlsdGVyUmVzdWx0LT5pbWFnZURhdGFJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKS5nZXQoKSkKKyAgICAgICAgPDwgIiBF
eGlzdGluZyB1bnByZW11bHRpcGxpZWQgaW1hZ2UgZGF0YSAiIDw8IFZhbHVlT3JOdWxsKG1fZmls
dGVyUmVzdWx0LT5pbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpLmdldCgpKSk7CiAKLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgcmV0dXJuIG1fZmls
dGVyUmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwogfQogCiBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIE9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKLSAgICBJbnRTaXpl
IHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAg
IHJldHVybiBpbWFnZURhdGE7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCiBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEoKSAqIDQpLnVu
c2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBJbnRS
ZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJl
bnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCi0gICAgaWYg
KHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5t
YXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEo
KSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAgLy8gRWFybHkgcmV0dXJuIGlmIHRo
ZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxl
ZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0
LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2Fs
ZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4T3JpZ2lu
ID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAoeE9yaWdpbiA8
IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdpbiA9IDA7Ci0g
ICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7Ci0gICAgaWYgKHhFbmQgPiBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53
aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKLSAgICBpbnQgeURl
c3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAgICB5RGVzdCA9IC15T3JpZ2lu
OwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0
Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKLQotICAgIGludCBzaXplID0gKHhF
bmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRS
ZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6
ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRp
b24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0Owot
ICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdp
biAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKLQotICAgIHdoaWxl
ICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291
cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9u
U2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOwotICAgICAg
ICArK3lPcmlnaW47Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxF
UkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
LSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9
IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNl
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwot
ICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlUHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAg
ICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFs
cGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwot
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIHJl
dHVybiBtX2ZpbHRlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQor
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCog
ZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEo
KTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBo
YSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsy
XSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBo
YTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
IAotUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VEYXRhVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZURhdGEm
IGlucHV0RGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCi17Ci0gICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgaW5wdXREYXRhLnNpemUoKSk7Ci0g
ICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGlu
YXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3Jl
IGluY29taW5nIEltYWdlRGF0YQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghYnVmZmVyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBidWZmZXItPnB1dEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IGlucHV0RGF0YSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCwgb3V0cHV0Rm9ybWF0KTsKLX0KKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
CisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIgorICAgICAgICA8PCAiIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1fZmlsdGVyUmVzdWx0LT5pbWFnZUJ1ZmZlcklmRXhpc3RzKCku
Z2V0KCkKKyAgICAgICAgPDwgIiBFeGlzdGluZyBwcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8
PCBWYWx1ZU9yTnVsbChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAgIDw8ICIgRXhpc3Rp
bmcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbChtX2ZpbHRlclJl
c3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKS5nZXQoKSkpOwogCi1SZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29s
b3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKLXsKLSAgICBGbG9hdFNpemUgY2xh
bXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotICAgIC8v
IENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1
dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252
ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2Up
OwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdp
bmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXIt
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIHJldHVy
biBjb252ZXJ0ZWRCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QpOworICAg
IG1fZmlsdGVyUmVzdWx0LT5jb3B5SW1hZ2VEYXRhKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3Rp
bmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAo
IWNvbnZlcnRlZEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVz
KCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0K
KyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2
ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRl
ZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgaW1h
Z2VEYXRhLCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQotICAg
ICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQorICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0KKyAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8
PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIgorICAgICAgICA8
PCAiIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1fZmlsdGVyUmVzdWx0LT5pbWFnZUJ1ZmZl
cklmRXhpc3RzKCkuZ2V0KCkKKyAgICAgICAgPDwgIiBFeGlzdGluZyBwcmVtdWx0aXBsaWVkIGlt
YWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAg
IDw8ICIgRXhpc3RpbmcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVs
bChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKS5nZXQoKSkpOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRo
ZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAg
ICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVy
dGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVz
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
KyAgICBtX2ZpbHRlclJlc3VsdC0+Y29weUltYWdlRGF0YShkZXN0aW5hdGlvbiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVs
dGlwbGllZFJlc3VsdCgpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOwotCi0gICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNp
emUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAg
ICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAg
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNp
emUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChy
ZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAg
ICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHJlY3QpOworICAgIG1fZmlsdGVyUmVzdWx0LT5jb3JyZWN0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpCkBAIC01NTAsMTIgKzI3OSw4IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0
eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJz
b2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICBtX2ZpbHRlclJlc3VsdCA9IEZpbHRlclJlc3VsdDo6
Y3JlYXRlSW1hZ2VCdWZmZXIobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNl
KTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKIH0KIAogSW1hZ2VEYXRhKiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKQEAgLTU2NCwxNCArMjg5
LDggQEAgSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCkKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNT
RVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOworICAgIG1fZmlsdGVyUmVzdWx0ID0gRmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBtX2ZpbHRlclJlc3Vs
dCA/IG1fZmlsdGVyUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSA6IG51bGxwdHI7CiB9CiAKIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQpAQCAtNTgwLDUwICsyOTksMTQgQEAgSW1h
Z2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAK
ICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFz
UmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVh
dGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNl
Q29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRzdENvbG9yU3BhY2Up
Ci17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVy
IHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAg
IC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3Bh
Y2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlz
IG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRzdENvbG9yU3BhY2UgJiYgcmVz
dWx0Q29sb3JTcGFjZSgpICE9ICpkc3RDb2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlv
bmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBV
TlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisg
ICAgbV9maWx0ZXJSZXN1bHQgPSBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jl
c3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBtX2ZpbHRlclJlc3VsdCA/IG1fZmlsdGVyUmVz
dWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgOiBu
dWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0g
ICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAg
IFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQo
KSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAg
IGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xvclNw
YWNlLCBkc3RDb2xvclNwYWNlKTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9y
U3BhY2U7Ci0KLSAgICBpZiAobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxw
dHI7Ci0jZW5kaWYKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIG1fZmlsdGVyUmVzdWx0
LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZHN0Q29sb3JTcGFjZSk7CiB9CiAKIFRleHRTdHJlYW0m
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmlu
ZGV4IDBhMTAyZDhjZGZlMGRkYzFkNzNlOTRjZjdiZTFlYjRiMGUyMGVhYzguLmRkZmZlYTllZWFk
ODk2MDFmN2JiN2ExZDY4OWYyODc4M2JkOGM3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1
aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRl
ckVmZmVjdDsKK2NsYXNzIEZpbHRlclJlc3VsdDsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3Mg
SW1hZ2VEYXRhOwogCkBAIC04NiwxOCArODgsMTMgQEAgcHVibGljOgogICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiwgT3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7CiAgICAgdm9pZCBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBXVEY6Om51bGxvcHQp
OwogICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdCgp
OwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1
dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25z
dDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRFZmZlY3RzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdDsKICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBj
aGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVj
dC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0OwotICAgIH0KKyAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlclJlc3VsdDsgfQogCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMTcsMTEgKzEx
NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwbHkoKTsKIAotICAgIC8vIENvcnJlY3QgYW55
IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIg
b3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBp
eGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8v
IE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZv
cm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KTsKIAogICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29u
c3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KQEAgLTE4OCwzMiArMTgwLDE5
IEBAIHByb3RlY3RlZDoKICAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
IAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29y
cmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCisgICAgLy8gUmV0dXJuIGZhbHNlIGlm
IHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFs
dWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25l
bnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBs
aWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYg
bmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0g
MDsKIAotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIEltYWdlRGF0YSYsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJv
b2wgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBjb252ZXJ0SW1hZ2VEYXRh
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VEYXRhJiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gY29udmVydEltYWdlQnVmZmVy
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgCi0KICAgICBGaWx0ZXImIG1f
ZmlsdGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAotICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxGaWx0ZXJSZXN1bHQ+IG1fZmls
dGVyUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJSZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyZGNiN2EwYjk4MTU5Y2Y4NTcwMzhlNDk2NmMzMGM1
MTc1ODFhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKwor
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2Vu
ZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJh
dGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJSZXN1
bHQ+IEZpbHRlclJlc3VsdDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNh
bFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShsb2dpY2FsU2l6ZSk7CisgICAg
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWx0ZXJSZXN1bHQoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKK30KKworUmVmUHRyPEZpbHRl
clJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gbG9naWNh
bFNpemU7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOworICAgIGF1dG8g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmlsdGVyUmVzdWx0KFdURk1vdmUoaW1hZ2VEYXRhKSwgYWxwaGFGb3JtYXQsIHJlbmRlcmlu
Z01vZGUsIHsgbG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4IH0pKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoUmVmUHRy
PEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogbV9pbWFnZUJ1ZmZlcihXVEZNb3Zl
KGltYWdlQnVmZmVyKSkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlcik7CisgICAgbV9yZW5k
ZXJpbmdNb2RlID0gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpOworICAgIG1fcGFyYW1l
dGVycyA9IG1faW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMoKTsKK30KKworRmlsdGVyUmVzdWx0OjpG
aWx0ZXJSZXN1bHQoUmVmUHRyPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogbV9yZW5k
ZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykK
K3sKKyAgICBBU1NFUlQoaW1hZ2VEYXRhKTsKKyAgICBpbWFnZURhdGFJZkV4aXN0cyhhbHBoYUZv
cm1hdCkgPSBXVEZNb3ZlKGltYWdlRGF0YSk7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1
bHQ6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUsIG1fcmVuZGVyaW5nTW9kZSwgbV9w
YXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UpOworICAg
IGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRS
ZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2Fs
U2l6ZSkgfTsKKworICAgIGlmIChpbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGFJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxz
ZQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisg
ICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdl
X0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3Jj
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRl
czsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkp
OworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUu
d2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0
LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1
aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4
X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZl
R2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGlu
dCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1
NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAv
IDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAg
c291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7
CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJB
VEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAg
dkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Cisg
ICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSBy
b3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5k
YXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAg
ICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAg
ICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgaWYgKGFscGhhKSB7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAy
NTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+JiBGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhIDogbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhOworfQorCitJbWFnZURhdGEqIEZpbHRlclJl
c3VsdDo6aW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7Cisg
ICAgYXV0byYgaW1hZ2VEYXRhID0gaW1hZ2VEYXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpOworICAg
IGlmIChpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBpbWFnZURhdGEuZ2V0KCk7CisgICAgCisg
ICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgaW1hZ2VEYXRhID0gbV9pbWFnZUJ1ZmZl
ci0+Z2V0SW1hZ2VEYXRhKGFscGhhRm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9wYXJh
bWV0ZXJzLmxvZ2ljYWxTaXplKSB9KTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsK
KyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2Fs
U2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzY2FsZWRTaXplKTsKKyAg
ICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAg
ICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgKmltYWdlRGF0YS0+ZGF0YSgp
LCBzY2FsZWRTaXplKTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoKmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpLT5kYXRhKCksICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1
cm4gaW1hZ2VEYXRhLmdldCgpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRl
clJlc3VsdDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBz
Y2FsZWRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0
byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgo
c2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFpbWFnZURhdGEp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weUltYWdlRGF0YSgqaW1hZ2VEYXRh
LCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsK
K30KKworYm9vbCBGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZl
cnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAor
eworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3
ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAv
LyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNl
IGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBt
YW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fcGFyYW1l
dGVycy5jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFs
IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVT
RURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3Zv
aWQgRmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNjYWxlZFJl
Y3Quc2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSk7CisgICAgSW50U2l6ZSBzY2Fs
ZWRQYWludFNpemUobV9wYXJhbWV0ZXJzLmxvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNp
emUuc2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFs
aXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5
IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNj
YWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53
aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQor
ICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgo
KSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0
IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2Fs
ZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53
aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBp
bnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14
T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQor
ICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdp
biA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4g
PCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOwor
ICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50
IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2Nh
bGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNl
UGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNl
UGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisK
K1JlZlB0cjxJbWFnZURhdGE+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkSW1hZ2VEYXRhKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Up
IGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0
aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3Bh
Y2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24g
aGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8g
YW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXIt
PmdldEltYWdlRGF0YShhbHBoYUZvcm1hdCwgcmVjdCk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+
IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VEYXRhLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9wYXJhbWV0ZXJzLnJlc29sdXRp
b25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBz
dG9yZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCBtX3BhcmFtZXRlcnMucmVz
b2x1dGlvblNjYWxlLCBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKGFscGhhRm9ybWF0LCBpbWFnZURhdGEsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252
ZXJ0ZWRJbWFnZURhdGEoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFj
ZSk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VEYXRhKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3RzKGFscGhh
Rm9ybWF0KTsKKworICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlciAmJiByZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2Up
KSB7CisgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfTsKKyAgICAgICAgICAgIGlmIChhdXRvIGNvbnZl
cnRlZEltYWdlRGF0YSA9IGdldENvbnZlcnRlZEltYWdlRGF0YSgqbV9pbWFnZUJ1ZmZlciwgYWxw
aGFGb3JtYXQsIHJlY3QsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcygqY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGltYWdlRGF0YSA9IHRo
aXMtPmltYWdlRGF0YShhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZURhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZEltYWdl
RGF0YSA9IGdldENvbnZlcnRlZEltYWdlRGF0YSgqaW1hZ2VEYXRhLCBhbHBoYUZvcm1hdCwgKmNv
bG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0
YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjb3B5SW1hZ2VCeXRlcygqaW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBz
cmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0
czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1f
cHJlbXVsdGlwbGllZEltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFt
cGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZURhdGEtPmRhdGEoKTsK
KyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7CisgICAgaW50IHBp
eGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3Qg
aGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VS
VCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCog
bGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAg
ICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEp
OworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4
ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBp
eGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVs
cy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAg
dnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0
YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAg
ICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1Q
aXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNo
IHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYg
bmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxw
aGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhl
bERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFu
ZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAg
ICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAg
fQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOwor
ICAgIH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cg
aGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9Q
QVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9wYXJhbWV0
ZXJzLmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4g
YXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9u
IGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUg
e3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRo
aXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNw
YWNlKG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fcGFyYW1l
dGVycy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZEltYWdl
RGF0YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0gbnVsbHB0cjsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42OGE1ZTJhYjJiYmNkYTczYmMxZDRjOTBiYTU4YTQ2YTI5MzVkYzAzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
UHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNh
bFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25D
b2xvclNwYWNlKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlSW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSk7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOwor
CisgICAgUmVmUHRyPEltYWdlRGF0YT4mIGltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb24pOworICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgY29weUltYWdlRGF0YShVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsK
KyAgICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKCk7CisgICAgdm9p
ZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0
ZToKKyAgICBGaWx0ZXJSZXN1bHQoUmVmUHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBGaWx0ZXJS
ZXN1bHQoUmVmUHRyPEltYWdlRGF0YT4mJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzJik7CisKKyAgICBi
b29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRDb252ZXJ0
ZWRJbWFnZURhdGEoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICAKKyAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bnByZW11
bHRpcGxpZWRJbWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIEltYWdl
QnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc4OWE4OWM1NDMyZWY4ZTMyZjkwNGUz
NDcwM2FmMjUwNDgzYTU3MTAuLjYyYTliYzE1MTdjNDJkOWY5OWFiYThiODIwM2FmY2I0NjdiZTQ1
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNzAsNyArMjcwLDYgQEAgdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IEdyYXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAg
ICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAg
ICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9
CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKQEAgLTMxNSw3
ICszMTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICAvLyBvciBub25lIG9m
IHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKKyAgICAgICAg
ZWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgICAgICAvLyBSZXBhaW50IHRo
ZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9u
KCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4z
M2E5NzUxYWZiZDg2ZDEyNmQ4ZjllNjQyMjIyMjkwZWNkN2I2MWIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cApAQCAtOTIsMTUgKzkyLDQgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMo
KQogICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICgh
ZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVh
clJlc3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2Vz
KGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNj
MmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNzFiMmQ5ZTI3NTA4OWI1NTMxODc2OTcyOGE3NjQ3
ZjQxYTUxMTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAg
aW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVj
dCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiAgICAgdm9pZCBj
bGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZl
Y3QqKTsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427241</attachid>
            <date>2021-04-27 23:56:06 -0700</date>
            <delta_ts>2021-11-01 18:12:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20210427235605.patch</filename>
            <type>text/plain</type>
            <size>61897</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmYxNWU3ZTg3OTkyNWMx
M2I1NjU0NmFiZjNiMTZjNjI4MTljMTdlNS4uOTgzOThiZGJmM2E4ZmQ2OTIyY2M5OWY2Mjc4YjEz
YzgwZDJmMTg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDIxLTA0LTI3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBG
aWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVy
UmVzdWx0JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSB0aGUgc3RvcmFnZSBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9m
IGFwcGx5aW5nIHRoZQorICAgICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5l
dyBjYWxscyBuYW1lZCAnRmlsdGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBp
bnRlZ3JhdGluZworICAgICAgICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHksIHNpbXBsaWZ5aW5n
IHRoZSBnZW9tZXRyeSBjYWxjdWxhdGlvbiBhbmQgc2F2aW5nCisgICAgICAgIG1lbW9yeSBmb3Ig
RmlsdGVyRWZmZWN0IHdoaWNoIGN1cnJlbnRseSByZXF1aXJlcyBhbGxvY2F0aW5nIG1lbW9yeSBm
b3IKKyAgICAgICAgdGhlIG1heEVmZmVjdFJlY3QoKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAg
ICAgICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0
aGUgb3Bwb3NpdGUgCisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVs
cygpLiBDb3JyZWN0aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJl
IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgIENvcnJlY3QgdGhlIHByZW11bHRpcGxpZWQgcmVzdWx0IGlmIG5lZWRl
ZC4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6CisgICAg
ICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUgYnkgbnVsbGlmeWluZyBhIHNpbmds
ZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVy
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFU
b0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdlcmUgbW92ZWQgdG8gRmlsdGVyUmVz
dWx0LmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5
aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjppbWFnZURhdGFJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNvcHlJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmltYWdlQnVmZmVySWZFeGlzdHMp
OgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQg
cmVjdXJzaXZlbHkgY2FuIGJlIGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCiAyMDIxLTA0LTI3ICBD
YW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQXNzb2NpYXRl
IGEgcGljdHVyZSBlbGVtZW50IHdpdGggYW4gaW1nIG9ubHkgaWYgdGhlIGltZyBpcyBhIGRpcmVj
dCBjaGlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMGI0OGMxMWQzYTJmZDc4ZjFjYzg5ODA2M2FmMzI3
NWU4MmQ0NjM5My4uZTAwMTRhNTk3MTViZjk5ZmFiZmM5NTFiOGFlYjQxNmU4NDlhY2IyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTIwNTYsNiArMjA1Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGM3OTcwMDNjODlkZDRjNmQwYTcyZTAyYTRlYTE2NjAyZTA3MGE5NjEuLjJkOWQ1ZjU5YWYz
M2I3ZjkxOTFlNGJkMjg0YTFhMTk3Y2E0MjY4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjkzLDYgKzEwMjkzLDggQEAK
IAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ5MzksNiArMjQ5NDEsOCBAQAogCQkJCTQ5RUNF
QjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2
NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VC
NjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkM5MEEz
OTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2
MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4RjBC
MzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRB
QzhDIC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMwMEQz
QTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDRkMjI4
ZjkwNWIyMGZiOTEzYWRkZmJkYmQyOTg5OWI0ODgxZjZkYTkuLjg1MmQ4ODJmNDc0ZGU0MDFjYWEz
MzAwMDZjOTczYzQ2ZGFlZWRiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC04NywxNCArODcsNiBA
QCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAg
ICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAg
CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQg
Y2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMz
Li4xZmEwY2IzYTYzNzNlNTNkNWRlZjNkZDRlM2I2ZTM3MDc0M2FhNWNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5o
CkBAIC01OCwxNiArNTgsMTMgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1
cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9v
bCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
dHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6CiAg
ICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lkIGNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJl
bXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDE4NjdmY2U1MTM1MjFlYTRjYTViYTkwNGYyZDYw
NWRmOTlhNDRhMDQuLmQ3ZTdiM2ZmMjY3NDBkMmM1OGZmYjZjM2M1ZjNhYTIxYzhmZDA5ODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAt
MzUsMTQgKzM1LDYgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRl
ciYgZmlsdGVyLCBUeXBlIHR5cGUpCkBAIC0xODEsNzQgKzE3MywzNCBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoKQogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgc2V0
UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0gICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
ICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVz
ICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdp
b24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWlu
dFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8
IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAg
ICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIg
YXBwbHkoKTpcbiIKKyAgICAgICAgPDwgImZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1f
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiIKKyAgICAgICAgPDwgImVmZmVjdEJvdW5k
YXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuIgorICAgICAgICA8PCAiYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8
ICJcbiIKKyAgICAgICAgPDwgImFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50
UmVjdCA8PCAiXG4iCisgICAgICAgIDw8ICJtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RS
ZWN0IDw8ICJcbiIKKyAgICAgICAgPDwgImZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkgPDwgIlxuIgorICAgICAgICA8PCAiZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2Zp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwogCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3Qu
aXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJl
c3VsdElmTmVlZGVkKCk7CisgICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQ
aXhlbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpIHsKKyAg
ICAgICAgICAgIGlmICghaW4tPm1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVt
dWx0aXBsaWVkUmVzdWx0KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBBZGQg
cGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVy
LgogICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6
Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQotewotICAgIC8vIE11c3Qgb3BlcmF0ZSBv
biBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFs
aWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFn
ZUFycmF5LT5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5s
ZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5k
IGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0K
LSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGgg
Pj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVs
QXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3Jl
bWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5Q
aXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52
YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxb
M10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4
ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4
ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7
Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsK
LQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRq
dXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4
ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwK
LSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAg
ZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9u
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
KnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFs
cGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQogdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7CisgICAgbV9maWx0ZXJSZXN1bHQgPSBudWxscHRyOwog
fQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKQEAgLTI2NSwy
ODMgKzIxNyw2MCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkK
IAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOwotCiAgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0K
LSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4iCisgICAgICAgIDw8ICIgRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9maWx0ZXJSZXN1bHQtPmltYWdlQnVmZmVySWZFeGlz
dHMoKS5nZXQoKQorICAgICAgICA8PCAiIEV4aXN0aW5nIHByZW11bHRpcGxpZWQgaW1hZ2UgZGF0
YSAiIDw8IFZhbHVlT3JOdWxsKG1fZmlsdGVyUmVzdWx0LT5pbWFnZURhdGFJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKS5nZXQoKSkKKyAgICAgICAgPDwgIiBF
eGlzdGluZyB1bnByZW11bHRpcGxpZWQgaW1hZ2UgZGF0YSAiIDw8IFZhbHVlT3JOdWxsKG1fZmls
dGVyUmVzdWx0LT5pbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpLmdldCgpKSk7CiAKLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgcmV0dXJuIG1fZmls
dGVyUmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwogfQogCiBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIE9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKLSAgICBJbnRTaXpl
IHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAg
IHJldHVybiBpbWFnZURhdGE7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCiBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEoKSAqIDQpLnVu
c2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAg
IHJldHVybiBtX2ZpbHRlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3Qp
OwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50
U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNj
YWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIElu
aXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50
aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAg
fHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxl
bmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8
IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwot
ICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0
ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9
IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5
T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9y
aWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9
IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlF
bmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0Owot
ICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAg
ICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3Qg
KiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBz
b3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsK
LSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAg
ICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBz
b3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0K
LX0KKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxz
ZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0g
ICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9
IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KKyAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkg
PDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIgorICAgICAgICA8
PCAiIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1fZmlsdGVyUmVzdWx0LT5pbWFnZUJ1ZmZl
cklmRXhpc3RzKCkuZ2V0KCkKKyAgICAgICAgPDwgIiBFeGlzdGluZyBwcmVtdWx0aXBsaWVkIGlt
YWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAg
IDw8ICIgRXhpc3RpbmcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVs
bChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKS5nZXQoKSkpOwogCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICog
NDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJv
d0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
Pihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0Lndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwot
I2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgp
OwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUu
YXJlYSgpICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25l
bnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVu
ZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlm
IChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsy
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAw
OwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0Owot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgorICAgIG1f
ZmlsdGVyUmVzdWx0LT5jb3B5SW1hZ2VEYXRhKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlRGF0YSYgaW5wdXREYXRh
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKLXsKLSAgICBJbnRSZWN0IGRl
c3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBpbnB1dERhdGEuc2l6ZSgpKTsKLSAgICBkZXN0aW5h
dGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Qu
c2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcg
SW1hZ2VEYXRhCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgaW5wdXREYXRh
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBvdXRwdXRG
b3JtYXQpOwotfQotCi1SZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFn
ZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKLXsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXpl
IENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJp
bmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UpOwotICAg
IGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBD
b2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJv
bSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIHJldHVybiBjb252
ZXJ0ZWRCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QpOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3Rp
bmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAo
IWNvbnZlcnRlZEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVz
KCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0K
KyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2
ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRl
ZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgaW1h
Z2VEYXRhLCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQotICAg
ICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQorICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0KKyAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8
PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIgorICAgICAgICA8
PCAiIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1fZmlsdGVyUmVzdWx0LT5pbWFnZUJ1ZmZl
cklmRXhpc3RzKCkuZ2V0KCkKKyAgICAgICAgPDwgIiBFeGlzdGluZyBwcmVtdWx0aXBsaWVkIGlt
YWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVsbChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkuZ2V0KCkpCisgICAgICAg
IDw8ICIgRXhpc3RpbmcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgIiA8PCBWYWx1ZU9yTnVs
bChtX2ZpbHRlclJlc3VsdC0+aW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKS5nZXQoKSkpOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRo
ZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAg
ICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVy
dGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVz
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
KyAgICBtX2ZpbHRlclJlc3VsdC0+Y29weUltYWdlRGF0YShkZXN0aW5hdGlvbiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVs
dGlwbGllZFJlc3VsdCgpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOwotCi0gICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNp
emUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAg
ICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAg
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNp
emUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChy
ZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAg
ICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHJlY3QpOworICAgIG1fZmlsdGVyUmVzdWx0LT5jb3JyZWN0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpCkBAIC01NTAsMTIgKzI3OSw4IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0
eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJz
b2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICBtX2ZpbHRlclJlc3VsdCA9IEZpbHRlclJlc3VsdDo6
Y3JlYXRlSW1hZ2VCdWZmZXIobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNl
KTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKIH0KIAogSW1hZ2VEYXRhKiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKQEAgLTU2NCwxNCArMjg5
LDggQEAgSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCkKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNT
RVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOworICAgIG1fZmlsdGVyUmVzdWx0ID0gRmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBtX2ZpbHRlclJlc3Vs
dCA/IG1fZmlsdGVyUmVzdWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSA6IG51bGxwdHI7CiB9CiAKIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQpAQCAtNTgwLDUwICsyOTksMTUgQEAgSW1h
Z2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAK
ICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFz
UmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVh
dGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNl
Q29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRzdENvbG9yU3BhY2Up
Ci17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVy
IHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAg
IC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3Bh
Y2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlz
IG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRzdENvbG9yU3BhY2UgJiYgcmVz
dWx0Q29sb3JTcGFjZSgpICE9ICpkc3RDb2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlv
bmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBV
TlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisg
ICAgbV9maWx0ZXJSZXN1bHQgPSBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jl
c3VsdENvbG9yU3BhY2UpOworICAgIHJldHVybiBtX2ZpbHRlclJlc3VsdCA/IG1fZmlsdGVyUmVz
dWx0LT5pbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgOiBu
dWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0g
ICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAg
IFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQo
KSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKKyAgICBpZiAoIWhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtQ29s
b3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1
bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsKLQotICAgIGlmIChtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0KQotICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsK
LSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSNlbmRpZgorICAgIG1fZmlsdGVyUmVzdWx0LT50
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZHN0Q29sb3JTcGFjZSk7CiB9CiAKIFRleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4
IDBhMTAyZDhjZGZlMGRkYzFkNzNlOTRjZjdiZTFlYjRiMGUyMGVhYzguLmRkZmZlYTllZWFkODk2
MDFmN2JiN2ExZDY4OWYyODc4M2JkOGM3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5i
b2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsNiArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVm
ZmVjdDsKK2NsYXNzIEZpbHRlclJlc3VsdDsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW1h
Z2VEYXRhOwogCkBAIC04NiwxOCArODgsMTMgQEAgcHVibGljOgogICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiwgT3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IFdURjo6bnVsbG9wdCk7CiAgICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBXVEY6Om51bGxvcHQpOwog
ICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9
IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdCgpOwog
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVm
ZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKSBjb25zdDsKICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAg
IHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVj
a3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4K
LSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OwotICAgIH0KKyAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclJlc3VsdDsgfQogCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMTcsMTEgKzExNCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwbHkoKTsKIAotICAgIC8vIENvcnJlY3QgYW55IGlu
dmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3Bl
cmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVs
IHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9u
bHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0g
Y29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVk
KCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
IAogICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qg
eyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KQEAgLTE4OCwzMiArMTgwLDE5IEBA
IHByb3RlY3RlZDoKICAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CiAgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKIAot
ICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVj
dGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRo
ZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVz
LCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQg
aW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVk
IGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVj
ZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsK
IAotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0
aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIEltYWdlRGF0YSYsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wg
cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBjb252ZXJ0SW1hZ2VEYXRhVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gY29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgCi0KICAgICBGaWx0ZXImIG1fZmls
dGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAotICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxGaWx0ZXJSZXN1bHQ+IG1fZmlsdGVy
UmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyZGNiN2EwYjk4MTU5Y2Y4NTcwMzhlNDk2NmMzMGM1MTc1
ODFhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlm
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+
IEZpbHRlclJlc3VsdDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWx0ZXJSZXN1bHQoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKK30KKworUmVmUHRyPEZpbHRlclJl
c3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGVJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAobG9naWNhbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGxvZ2ljYWxTaXplKSk7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gbG9naWNhbFNp
emU7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOworICAgIGF1dG8gaW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFpbWFnZURh
dGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsdGVyUmVzdWx0KFdURk1vdmUoaW1hZ2VEYXRhKSwgYWxwaGFGb3JtYXQsIHJlbmRlcmluZ01v
ZGUsIHsgbG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4IH0pKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoUmVmUHRyPElt
YWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGlt
YWdlQnVmZmVyKSkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlcik7CisgICAgbV9yZW5kZXJp
bmdNb2RlID0gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpOworICAgIG1fcGFyYW1ldGVy
cyA9IG1faW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMoKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0
ZXJSZXN1bHQoUmVmUHRyPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogbV9yZW5kZXJp
bmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykKK3sK
KyAgICBBU1NFUlQoaW1hZ2VEYXRhKTsKKyAgICBpbWFnZURhdGFJZkV4aXN0cyhhbHBoYUZvcm1h
dCkgPSBXVEZNb3ZlKGltYWdlRGF0YSk7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUsIG1fcmVuZGVyaW5nTW9kZSwgbV9wYXJh
bWV0ZXJzLnJlc29sdXRpb25TY2FsZSwgbV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2UpOworICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0
IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6
ZSkgfTsKKworICAgIGlmIChpbWFnZURhdGFJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGFJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZQor
ICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhSWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
ci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
c2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1
ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhl
aWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwor
CisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJv
d0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBh
bHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsK
KyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJj
ZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1
NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291
cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Cisg
ICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUp
CisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdklt
YWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAg
c3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRh
KCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBk
ZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3Qg
dWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0
aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgaWYgKGFscGhhKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUg
LyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
M10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK1JlZlB0cjxJbWFnZURh
dGE+JiBGaWx0ZXJSZXN1bHQ6OmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
IDogbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhOworfQorCitJbWFnZURhdGEqIEZpbHRlclJlc3Vs
dDo6aW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
YXV0byYgaW1hZ2VEYXRhID0gaW1hZ2VEYXRhSWZFeGlzdHMoYWxwaGFGb3JtYXQpOworICAgIGlm
IChpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBpbWFnZURhdGEuZ2V0KCk7CisgICAgCisgICAg
aWYgKG1faW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgaW1hZ2VEYXRhID0gbV9pbWFnZUJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKGFscGhhRm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9wYXJhbWV0
ZXJzLmxvZ2ljYWxTaXplKSB9KTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5nZXQoKTsKKyAg
ICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6
ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSk7
CisKKyAgICBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzY2FsZWRTaXplKTsKKyAgICBp
ZiAoIWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAg
Y29weVByZW11bHRpcGx5aW5nQWxwaGEoKmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgKmltYWdlRGF0YS0+ZGF0YSgpLCBz
Y2FsZWRTaXplKTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEo
KmltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
LT5kYXRhKCksICppbWFnZURhdGEtPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4g
aW1hZ2VEYXRhLmdldCgpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlclJl
c3VsdDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2Fs
ZWRTaXplLnNjYWxlKG1fcGFyYW1ldGVycy5yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBp
bWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoc2Nh
bGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weUltYWdlRGF0YSgqaW1hZ2VEYXRhLCBh
bHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30K
KworYm9vbCBGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNp
b24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAorewor
I2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBu
ZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBX
ZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlz
IGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5p
cHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fcGFyYW1ldGVy
cy5jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURf
UEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQg
RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNjYWxlZFJlY3Qu
c2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSk7CisgICAgSW50U2l6ZSBzY2FsZWRQ
YWludFNpemUobV9wYXJhbWV0ZXJzLmxvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUu
c2NhbGUobV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXpl
IHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNv
dmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxl
ZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAg
ICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7
CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdp
dGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRS
ZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQg
eERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3Jp
Z2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRS
ZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAg
ICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9
IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAw
KSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAg
IH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQg
ZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNv
dXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVk
UmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4
ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkp
ICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAg
IG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4
ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK1Jl
ZlB0cjxJbWFnZURhdGE+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNv
bnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUg
Y29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcGFyYW1ldGVycy5yZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFw
cGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5v
dGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdl
dEltYWdlRGF0YShhbHBoYUZvcm1hdCwgcmVjdCk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEZp
bHRlclJlc3VsdDo6Z2V0Q29udmVydGVkSW1hZ2VEYXRhKEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgaW1hZ2VE
YXRhLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25T
Y2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9y
ZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCBtX3BhcmFtZXRlcnMucmVzb2x1
dGlvblNjYWxlLCBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0SW1hZ2VE
YXRhKGFscGhhRm9ybWF0LCBpbWFnZURhdGEsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRJbWFnZURhdGEoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7
Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VEYXRhKFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNw
YWNlKQoreworICAgIGF1dG8mIGltYWdlRGF0YSA9IGltYWdlRGF0YUlmRXhpc3RzKGFscGhhRm9y
bWF0KTsKKworICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
ciAmJiByZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1f
cGFyYW1ldGVycy5sb2dpY2FsU2l6ZSkgfTsKKyAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRl
ZEltYWdlRGF0YSA9IGdldENvbnZlcnRlZEltYWdlRGF0YSgqbV9pbWFnZUJ1ZmZlciwgYWxwaGFG
b3JtYXQsIHJlY3QsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRl
cygqY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGltYWdlRGF0YSA9IHRoaXMt
PmltYWdlRGF0YShhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZEltYWdlRGF0
YSA9IGdldENvbnZlcnRlZEltYWdlRGF0YSgqaW1hZ2VEYXRhLCBhbHBoYUZvcm1hdCwgKmNvbG9y
U3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjb3B5SW1hZ2VCeXRlcygqaW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNS
ZWN0KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsg
b3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJl
bXVsdGlwbGllZEltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVk
QXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZURhdGEtPmRhdGEoKTsKKyAg
ICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7CisgICAgaW50IHBpeGVs
QXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2
ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCgh
KHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFz
dFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAg
ICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwor
ICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxz
LnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVs
cy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52
YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0
ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0
NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSAr
PSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAg
ICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhl
bHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBp
eGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVj
ZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEg
aXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERh
dGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBp
bmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAg
ICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAg
IH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFu
ZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJB
TShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9wYXJhbWV0ZXJz
LmNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZv
aWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5
IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3By
ZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMt
PmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNl
KG1fcGFyYW1ldGVycy5jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fcGFyYW1ldGVy
cy5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZEltYWdlRGF0
YSA9IG51bGxwdHI7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VEYXRhID0gbnVsbHB0cjsKKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42OGE1ZTJhYjJiYmNkYTczYmMxZDRjOTBiYTU4YTQ2YTI5MzVkYzAzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRy
PEZpbHRlclJlc3VsdD4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNp
emUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xv
clNwYWNlKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlSW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyByZXR1
cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworCisg
ICAgUmVmUHRyPEltYWdlRGF0YT4mIGltYWdlRGF0YUlmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24p
OworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgY29weUltYWdlRGF0YShVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmLCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKyAg
ICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKCk7CisgICAgdm9pZCB0
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToK
KyAgICBGaWx0ZXJSZXN1bHQoUmVmUHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBGaWx0ZXJSZXN1
bHQoUmVmUHRyPEltYWdlRGF0YT4mJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgSW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzJik7CisKKyAgICBib29s
IHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNv
bnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRDb252ZXJ0ZWRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRDb252ZXJ0ZWRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bnByZW11bHRp
cGxpZWRJbWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc4OWE4OWM1NDMyZWY4ZTMyZjkwNGUzNDcw
M2FmMjUwNDgzYTU3MTAuLjYyYTliYzE1MTdjNDJkOWY5OWFiYThiODIwM2FmY2I0NjdiZTQ1OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNzAsNyArMjcwLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdy
YXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAgICAg
ICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAg
bGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKQEAgLTMxNSw3ICsz
MTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICAvLyBvciBub25lIG9mIHRo
ZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKKyAgICAgICAgZWZm
ZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBp
bWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpv
YmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4zM2E5
NzUxYWZiZDg2ZDEyNmQ4ZjllNjQyMjIyMjkwZWNkN2I2MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApA
QCAtOTIsMTUgKzkyLDQgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQog
ICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICghZWZm
ZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVhclJl
c3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVm
ZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNm
Yzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNzFiMmQ5ZTI3NTA4OWI1NTMxODc2OTcyOGE3NjQ3ZjQx
YTUxMTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAgaW5s
aW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkg
eyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiAgICAgdm9pZCBjbGVh
ckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3Qq
KTsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443047</attachid>
            <date>2021-11-01 18:12:16 -0700</date>
            <delta_ts>2021-11-02 01:31:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211101181215.patch</filename>
            <type>text/plain</type>
            <size>312455</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNThhYWY0ZTJkZGNjNTQy
YmJmNmYyYTdhZDhjZGU4YjZhODAyYWE3Mi4uYzJhOTQwZDI2NGNmMDRiMmUxNzMyYjMyNzVkYTE5
ZGFmZGI1Njc1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyMSBAQAorMjAyMS0xMS0wMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5n
IHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMg
aW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQnLiBUaGlzIHdpbGwKKyAg
ICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2ls
bCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3Ns
eSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9uLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0
ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxs
aW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNy
ZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9y
IGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBj
cmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICByZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcHBvc2l0ZSAKKyAgICAg
ICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkuIENvcnJlY3RpbmcgdGhl
IHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJp
bmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZm
ZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERl
bGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3Zl
ZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNS
ZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworMjAyMS0xMC0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVyRWZmZWN0LCB3ZSBhcmUK
KyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIHRvIHRoZSBG
aWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBuZWVkZWQuCisKKyAgICAg
ICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVu
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1h
Z2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNl
cGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6bGFzdEVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAg
ICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVp
bGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
Lmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmls
dGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQgYXMg
YW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24g
aW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFz
c29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIg
d2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0
ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhl
IHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgor
ICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNp
bmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhl
IFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRv
IGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlv
biBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEg
cG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5k
IENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRl
ciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZp
bmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0
IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVt
ZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhl
IHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhD
bGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2lu
ZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRo
aXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBk
aXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVm
ZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVG
YWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNp
emUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAg
ICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNr
ZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29v
cmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAg
ICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQg
Im1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpm
aWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJT
Y2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisK
KzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhl
IGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBo
b2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhp
cyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0Cisg
ICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24g
aW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rp
b24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVy
RWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJl
cGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAg
ICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNW
R0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
ZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6
OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMC0zMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1pZ3JhdGUgdGhlIGZpcnN0IGZldyBjYWxs
ZXJzIGZyb20gSW1hZ2VCdWZmZXI6OnRydW5jYXRlZExvZ2ljYWxTaXplKCkgdG8gSW1hZ2VCdWZm
ZXI6OmxvZ2ljYWxTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3ZGMzYmQyY2Vk
MTE4NGMyZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4MTFjOGNiY2M5
YjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg0MGE0ZTNiMzdmMTMxN2M4MDdkMDQzNWExNjg2YWU3MTJlMzIzNTMuLmRkNDdlNTQyNjhkM2Qz
M2E0Y2JkNjJlNDJjMzY0ZmQ4MDI0MTUxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3IEBACiAJCTcy
NEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYx
M0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1
MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVC
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJGQjE3MjAwNzM4
RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLzsg
fTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1NEUxREM3RjI1
QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZC
MTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkg
LyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZp
bHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8q
IFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5
QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0
MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJp
bWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9w
ZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU3MSw2ICsx
MDU3NCw4IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRp
dGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRp
dmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZG
MDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAw
NzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2
QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3
QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4NjQ0LDExICsxODY0OSwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyog
YnJpZGdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1
OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5Q0UyMEQ3RTJCODIw
MDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlk
Z2UuaCAqLywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5j
cHAgKi8sCiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAq
LywKLQkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAotCQkJCTFBNTY5Q0Uy
MEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdDMzk4
MyAvKiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5ODMg
LyogcnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBy
dW50aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0yNTI5MSw2ICsyNTI5NiwxMCBAQAogCQkJCTA4Qzky
NTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKIAkJCQkyQzg1NjUzODI0
QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAorCQkJCTcy
NjJENzU3MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2
MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzI2QkUw
MjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3
MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAw
Q0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApAQCAtMzI3ODMsNiArMzI3OTIsNyBA
QAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCRTAy
RDI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5
RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRl
ckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUu
Y3BwCmluZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3NzAuLmUwN2Y1
NGEzNmQzMmEyMzNiMzA3NjZjNGQ3NjYyMmU2OGVjZjA0OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiwyMCArMTE2LDIyIEBAIFJlZlB0cjxJ
bWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZl
ci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4
dHVyZSkKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJl
bmRlcmluZ01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6
Om51bGxJbWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNp
emUgfTsKLSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0
KTsKKyAgICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9Owor
ICAgIHNvdXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VS
ZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBj
c3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRl
ci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0
ZXJSZWdpb24oaW1hZ2VSZWN0KTsKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3Jl
YXRlKG1fZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgCisgICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBpZiAoIWNzc0Zp
bHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6
OkZpbHRlckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0g
ICAgY3NzRmlsdGVyLT5hcHBseSgpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShX
VEZNb3ZlKHNvdXJjZUltYWdlKSk7CisgICAgY3NzRmlsdGVyLT5hcHBseUZpbHRlcigpOwogCiAg
ICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKICAgICBpZiAoIW91dHB1dCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXgg
ZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0NGFmNy4uZTdiYzg1MzI3MmFiNGRh
ZjdjOWI4NTAxODZjYzk5YTk3NDRmOTM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lDb250ZXh0
PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZl
Y3QmKSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
b3V0cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7CiAg
ICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwpA
QCAtNTUsMTIgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZSgpOwogICAgIAogcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJ
RmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJ
RmlsdGVycyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKTsKICAgICB2b2lkIHJlbmRlclRv
SW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2Fu
UmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAgUmV0YWluUHRy
PENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0
YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImKTsKICAg
ICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JN
YXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIFJldGFpblB0
cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRU
cmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOTdlMTEzN2Iy
OWQ3MWMyYjU0NDE1NzMwNjcyNDAwYjgyNDI4YjM2MS4uOGI0MDAxNzcwMGUxMGM2ODdiYTcwNmU1
NTk2YjhjMGIyMzBiYTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbQpAQCAtNzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29sIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVy
JiBlCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdl
IHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0
Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0
LmZpbHRlclR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRUNvbG9yTWF0cml4OiB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1hdHJp
eD4oZWZmZWN0KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5L
Tk9XTjoKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
QEAgLTg4LDkwICs4OCw1NiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgor
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgogICAgICAg
ICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0
PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJv
cFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0Ogot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
dXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3Rz
KEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxhc3RF
ZmZlY3QpOworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgbGFz
dEVmZmVjdCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAg
cmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKIH0KIAotUmV0YWluUHRyPENJSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVm
ZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZl
Y3QmIGVmZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dEltYWdl
czsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAg
ICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOworICAgICAgICBh
dXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgKmluKTsKICAgICAgICAg
aWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlu
cHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAgZWZmZWN0LmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGZpbHRlcik7CiAgICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ci0gICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0
Y2ggKGVmZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhkb3du
Y2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Q29sb3JNYXRyaXg6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZmls
dGVyKTsKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKICAgICAg
ICAgcmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4Pihl
ZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBv
bmVudFRyYW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRvd25j
YXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKIAotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRo
ZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCitSZXRh
aW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291
cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXNvdXJjZUlt
YWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTI3Niw3ICsyNDIsNyBAQCBJ
bWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0
CiB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVy
OjpjcmVhdGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSwg
bGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAg
bV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBl
ZFNpemUsIDEsIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewogICAgICAgICBjbGVhclJlc3Vs
dCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgsNyArMjU0LDYgQEAgdm9pZCBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxh
c3RFZmZlY3QKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJl
Y3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAogewogICAgIEludFNpemUg
ZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGRl
c3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgRmxv
YXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNpemUpOwogICAg
IHJldHVybiBkZXN0UmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYx
MTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uMzY3NzJiMGYzZWE5NGU4NWU2
NDJjNGJhMGY2OWQwNzI3NzQwMDQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAg
LTEwNywxMiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZFQmxlbmQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0
KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCmluZGV4IDVhYzdmNDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFkY2RiNjYuLjU2
NDRmZWE3YmY3N2I2NGZlZmY3ODUzNTA1MzQ1MTI3ZTRhNGNhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMzQs
MTUgKzM0LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChG
aWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpCbGVuZCkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwgbV9tb2RlKG1v
ZGUpCiB7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIs
IEJsZW5kTW9kZSBtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGUg
bW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCiBib29sIEZF
QmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDEyICs1NCwxMiBAQCBi
b29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAogI2lmICFIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQog
ewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZl
Y3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3
OWU3OTY2Li5lZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApA
QCAtMjMsMjIgKzIzLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXImLCBC
bGVuZE1vZGUpOworICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZSk7CiAK
ICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAg
Ym9vbCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9CisgICAgRkVC
bGVuZChCbGVuZE1vZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1Bp
eGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciog
ZHN0UGl4ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9y
QXJyYXlMZW5ndGgpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciog
c3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBj
aGFyKiBkc3RQaXhlbEFycmF5LApAQCAtNDYsMTAgKzQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXIm
LCBCbGVuZE1vZGUpOwotCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxl
bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0N2E0MjEwYzI4
NTQzMzJiYTFkM2U1Li5iNjY0ZjI5ZTY0OTFhODlmZjM3NzkyMWUyYzJmYTk2YTI3ODEyNTVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTM1LDE2ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENv
bG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAg
IDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeCkKICAgICAs
IG1fdHlwZSh0eXBlKQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewogfQogCi1S
ZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBD
b2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKK1JlZjxGRUNvbG9y
TWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3Rv
cjxmbG9hdD4mJiB2YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1h
dHJpeChmaWx0ZXIsIHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wg
RkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTI3MywxMSAr
MjczLDExIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCi12b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2FjNGRiNTUy
NGVmYTRjMTIzZi4uMjI5ZmYwYjhjNDRmNTFjMGVmMDU0ZTVlYTJhNDI0NmUyMjdkODdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcgQEAgZW51bSBD
b2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8
RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
IAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAg
ICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC01MCwxMSArNDgsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0ZToKLSAgICBGRUNvbG9y
TWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKLQotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1h
dHJpeCI7IH0KKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMsNyArODksNCBA
QCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRz
KGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKLSAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsg
cmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
Ci0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVh
YzU3ZjEwY2NmNTc0MDJmOWU2My4uODhlNTlmNTA4OTRlN2Q0ZjA3ZmFiMTlmNGU0M2Y4NmMzN2Yz
YzkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5ICszMyw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25l
bnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3Jl
ZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9u
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAg
ICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVl
bkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpAQCAtNDMsMTAg
KzQyLDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxGRUNvbXBvbmVu
dFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVmPEZFQ29tcG9u
ZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2Zlcihm
aWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVu
Y3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKHJl
ZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsK
IH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29r
dXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAtMTA0LDExICsx
MDMsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29r
dXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZvaWQgRkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMSw3ICsx
MjAsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxl
LCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5j
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5h
dGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBp
eGVsT2Zmc2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2ZiNDJhMzdiMmUx
MjNlZGE4NzExOWM0ZWIzNDhhNTEuLjZhZmVlNWU5Njg2MTcxMzc0MWUzOTlhNjhiNTFmMzk0MDgz
ZjA0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC0yMiw4ICsyMiw2IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01Myw4ICs1MSw3IEBAIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xh
c3MgRkVDb21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVm
PEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDEwICs1OSw3IEBAIHB1YmxpYzoKICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Fs
cGhhRnVuY3Rpb247IH0KIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRl
ciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwotCi0gICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KKyAg
ICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJl
ZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PjsKIApAQCAtNzcsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFi
bGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBo
YVRhYmxlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODksNiArODMs
NCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJu
IGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFuc2Zl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggODMzNTMwOTA4MWEyNmJhMmMzMWMzYmRhYzg4ODY2OWUy
OGUzNDU2ZC4uMmI4NzkyNDBlMWNiODZlMGI4ODhlMTNiODYzNjM2Y2VmMzBiZmZjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQorRkVDb21wb3Np
dGU6OkZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KEZp
bHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb3NpdGUpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAs
IG1fazEoazEpCiAgICAgLCBtX2syKGsyKQpAQCAtNDIsOSArNDIsOSBAQCBGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUm
IHR5cGUsIGZsbwogewogfQogCi1SZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorUmVmPEZFQ29tcG9zaXRlPiBGRUNv
bXBvc2l0ZTo6Y3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZSh0eXBlLCBrMSwgazIsIGszLCBrNCkpOwog
fQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSB0eXBlKQpAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQg
azQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRl
KGludCBjKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihjKSwgMjU1LCAwIH07CkBAIC0yMDEsNyArMTkzLDcgQEAgaW5saW5lIHZvaWQg
RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CkBAIC0yMTgsMjUgKzIxMCwyNSBAQCB2b2lk
IEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAgICAgIHJldHVy
bjsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0
IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChm
aWx0ZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBp
ZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBs
aWVkUmVzdWx0KCk7CiAgICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKKyAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTI0Nyw3ICsyMzksNyBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3MTA3YjRiOTY4YzU4ZTNh
MzdjMzJhZTJmNzZhZWEwYzMuLjE0MzU4ZGMzY2Y2YzFmZDljZWNhYzcyZWQ5NTI5MThhNmU1ODJk
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArMzks
NyBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFzcyBGRUNvbXBvc2l0ZSA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb3Np
dGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0
ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQpOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25U
eXBlKTsKQEAgLTU4LDE4ICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7
IHJldHVybiBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAg
ICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0
ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBv
c2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQpOwogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
KyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
OyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZvaWQgcGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7CkBAIC05MCwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29t
cG9zaXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5
NWM2ZjE1NmVjMjkzM2MwZTk5ZjA1MC4uNjgxNzQ0ZWE0MjQwZTkxNDVkY2M5YzU4YjI2NTc2Zjkx
ZGM4NWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zMiwxMCArMzIsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCitGRUNvbnZv
bHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwg
Ym9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQog
ICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikK
ICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTEgKzQ3LDkgQEAgRkVDb252b2x2ZU1hdHJpeDo6
RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6
ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNv
bnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9h
dCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxT
aXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVu
Z3RoLAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6
ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0
aCwKICAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAKQEAgLTM2Nywx
MSArMzYzLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRl
clBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFzdFNldE91dGVy
UGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IHVucHJlbXVsdGlwbGllZFJlc3Vs
dCgpIDogcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODEsMTUgKzM3NywxNCBAQCB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkK
LSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVs
QXJyYXkgPSBpbi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAg
ICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRTaXpl
IHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5z
Y2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQorICAgIAogICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAogICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2Zj
ZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjk1NzZkZmVlN2U4NDJjYWY0NjUwODVhZDcx
YmM3MGUyZjVhYWY1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0yNCw3ICsyNCw2IEBA
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1vZGVUeXBlIHsKIAogY2xhc3Mg
RkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IEludFNpemUm
LAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlw
ZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50
U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9p
bnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxV
bml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5l
bE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tl
cm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6ZSYpOwpAQCAt
NzcsMTQgKzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0
cml4OwogICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNp
emUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2Rl
VHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAg
ICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlz
b3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlw
ZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4IjsgfQor
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUg
eyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkp
OyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTExNSwzICsxMDksNCBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5m
NzZjZTJjZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhhNDA3ZDEzNDFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhm
aWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZm
dXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK0ZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0
U291cmNlKQorICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewogfQogCi1SZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxp
Z2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3Ro
WCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNj
YWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURp
ZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0
RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKICAgICBpZiAobV9kaWZm
dXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmlu
ZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjhhMTBhZWM4N2M4
ZjE4OWY5ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgK
QEAgLTI5LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7CiAKIGNsYXNzIEZFRGlmZnVzZUxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRl
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KICAgICBib29sIHNldERpZmZ1
c2VDb25zdGFudChmbG9hdCk7CkBAIC0zOCw4ICszNyw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VM
aWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8
TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIx
NmM1NjNmYTEuLjY1NjYzZDkyOTY3ZWE2ZjdmMGJhY2MzNWMxN2UzZmMwMTAzNWFiNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0zMSwxOCArMzEsMTcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVy
JiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkKK0ZFRGlzcGxhY2VtZW50TWFwOjpG
RURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENo
YW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAs
IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNl
bGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3NjYWxlKHNjYWxlKQogewogfQogCi1S
ZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorUmVmPEZFRGlzcGxh
Y2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBm
bG9hdCBzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1h
cChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3Rv
ciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1h
cDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IpCkBAIC05MSw3ICs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9m
ZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAg
cmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRURpc3BsYWNlbWVu
dE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwpAQCAtOTksMjkgKzk4LDI3IEBAIHZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJUKG1feENoYW5uZWxTZWxl
Y3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3Ig
IT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGlucHV0SW1hZ2Ug
PSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25z
IHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2lu
ZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJ
bWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAg
YXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCiAgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFj
ZW1lbnRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxl
bmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CiAKLSAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBz
Y2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZv
ckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0
WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5k
ZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uNmVlNjhiMTA4ZGI3
M2IwNzA0ZmZlZDljNTEwYjQyM2ExYzc1YWRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApA
QCAtMjIsNyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNyBAQCBlbnVtIENoYW5uZWxTZWxl
Y3RvclR5cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShG
aWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIHN0YXRpYyBSZWY8
RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
OwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAgYm9vbCBzZXRYQ2hhbm5lbFNlbGVjdG9y
KGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAtNTIsMTMgKzUxLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
aW50KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXIm
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5u
ZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQorICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgaW50IHhDaGFu
bmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAgICAg
aW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAx
OyB9CkBAIC03MiwzICs2OSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlzcGxhY2VtZW50TWFw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgwOTIxNmU0YjIyNDM1MTE4NjIzZTI4
ZmZkNjFlZmEuLjZhOTZjYTk5MDkxYWFhY2MzYjNkMGJlMmFlZTk1MjM0OWFiMmI2MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0
ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6RHJvcFNoYWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBm
bG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVEcm9wU2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkK
ICAgICAsIG1fZHgoZHgpCkBAIC00MiwxOCArNDIsMTYgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BT
aGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBm
bG8KIHsKIH0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNp
dHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3Rk
WCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0Nv
bG9yLCBzaGFkb3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCit2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLQogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9
KSk7CisgICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFi
c29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9
KTsKQEAgLTcwLDE5ICs2OCwxNiBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7CisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0g
ZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOwogCiAgICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJh
d2luZ1JlZ2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2UwNTcz
NGVlODhhMjllZmYzODRjLi4xNzcwNTZiYmNmODgzZTY0YmQxNGUxYzRmODViNzRkZjY3M2ZjNDNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNo
YWRvdz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0
IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgo
KSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxv
YXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxMyArNDcsMTEgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93
T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAgICBGRURyb3BTaGFkb3co
RmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQp
OworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSk7CiAK
LSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRHJv
cFNoYWRvdyI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC03MCwzICs2
Nyw0IEBAIHByaXZhdGU6CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBi
NDIzNTUzNGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi5jNTcwZDljNTVlZjY1MzE2
NDgwZDVjZTg5YmE3MjU0MjdlYjY3YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29s
b3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xv
cikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0KIAotUmVmPEZFRmxv
b2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29s
b3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29u
c3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNp
dHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKQEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQg
Zmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uYTIwNzgx
OTJlNjY4NjVkNzI4ZDRhZTQ3MzM0YWIxNDhjYjE0ZDg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIyLDE0ICsyMiwx
MyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAg
ICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxv
YXQgZmxvb2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJik7CkBAIC00NSwxMyArNDQsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgRkVGbG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29kKGNv
bnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQorICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQ
YWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTYxLDMgKzU4LDQgQEAgcHJp
dmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMGY2ZWU4
N2Y5NWU3NTc1MTg2M2ZkMmU1ZjU0OWU3NGQ5NzI5ZGIxZi4uMTM2ZjY4YWFmNzdkOGIyNTAzYmJk
ZjZmNGQ4ZThiNTg4YjExNzExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTc5LDE3ICs3
OSwxNyBAQCBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5z
aWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsCiAgICAgfQogfQogCi1GRUdhdXNzaWFuQmx1
cjo6RkVHYXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNz
aWFuQmx1cikKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkp
CiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+
IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5LCBlZGdl
TW9kZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVk
Z2VNb2RlKSk7CiB9CiAKIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxv
YXQgeCkKQEAgLTQ4NSw3ICs0ODUsNyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwg
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7
CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAtNDk2LDkgKzQ5
Niw5IEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8g
MiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJs
dXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIElu
dFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRY
LCBtX3N0ZFkgfSk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6
ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVQ
YWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAvLyBF
ZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBw
YWludCByZWN0LgpAQCAtNTE5LDExICs1MTksMTEgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MzYsMTEgKzUzNiw5IEBAIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFtX3N0
ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXpl
ID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAg
ICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUg
a2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZ
IH0pOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgYXV0
byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChwYWludFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2Jl
YWFhMTc2NDdjYmIyZDNlLi43Njk2MjNhZmE1NDJjMGQ4NjI1YWRkYTA1OTI1MGY1ODVlMDUzYWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZF
R2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1v
ZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25z
dCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpA
QCAtNDUsOSArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0
c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNz
aWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBjb25z
dCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVy
IjsgfQorICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7
CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAx
MDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAKQEAgLTY0LDkg
KzYxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CiAgICAgfTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04MywzICs4MCw0IEBAIHByaXZh
dGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19G
SUxURVJfRUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggNjU5YjEwNTVm
NjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uZmJkNTAzOTAyYmNjNThlZjUzNGY4NWE5
OTEwYzRjN2FiNzA1YzM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zNSw4ICszNSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRl
ciwgTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3Is
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJj
ZSwgVHlwZSB0eXBlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKK0ZFTGlnaHRp
bmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRWZmZWN0KHR5cGUpCiAgICAg
LCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCiAgICAgLCBtX2xpZ2h0U291cmNlKFdURk1v
dmUobGlnaHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCkBA
IC00NzEsMTEgKzQ3MSwxMSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQg
RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApp
bmRleCBiMGJiNzBhMTRkMTc0OTUwNjczN2U4OGUwNTE0ZWU3OTY4MjBhNDQ5Li5kODUyZjhiMTNk
ZDc5N2Y4ZTg5OTM1MWY4YjU4ZDM1ODVhMDNmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjcsNyArMjcs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgpAQCAtNDAsNyArMzksNyBAQCBz
dHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGZsb2F0IHN1cmZhY2VT
Y2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJm
YWNlU2NhbGUoZmxvYXQpOwpAQCAtMTI4LDE2ICsxMjcsMTQgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFyYW1ldGVycyopOwogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZF
TGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7CiAKLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYs
IExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQorICAg
IEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKIAogICAg
IGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwogCiAgICAg
dm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9h
dCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7CiAgICAgdm9pZCBzZXRQaXhlbEludGVy
bmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5j
cHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uZmJmNTAz
OTA5ZmM4ZjhhM2RhYWRlNTY5MDMwOTdiMTRjZDVhZjY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yOCwyMiAr
MjgsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRl
ciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitGRU1l
cmdlOjpGRU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
TWVyZ2UpCiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVy
Z2UoKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQg
RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAw
KTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNm
YzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uMDUxOWE1Njg4YTgzNjNmYzFi
YTA2MzIwNGRiMjJmNzQzMWFlMzRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIyLDIzICsyMiwyMSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7
CisgICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1l
cmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KLQotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5k
ZXggNmFlM2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1OGRhZWQ2Yi4uNWY3NGNmZDc0ZmI4
Zjk4NTQzOTZiNzU3YTRhYzIwZGI0YjYxODczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMzUs
MTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1v
cnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6Ok1vcnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCisgICAgOiBGaWx0
ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3kpCiAgICAgLCBtX3R5cGUo
dHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJhZGl1c1kp
CiB7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVz
WCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neSh0eXBl
LCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9s
b2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQpAQCAtNzIsMTEgKzcyLDEw
IEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCit2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBwYWludFJlY3QuaW5mbGF0
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsK
ICAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1h
eEVmZmVjdFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjQwLDExICsyMzksMTEgQEAgYm9vbCBGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQ
aXhlbEFycmF5LCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgsMTIgKzI1NywxMSBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAocGxhdGZvcm1B
cHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
cmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFy
cmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9y
YWRpdXNYLCBtX3JhZGl1c1kgfSkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogICAgIGlu
dCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1
cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIApAQCAtMjczLDEwICsyNzEsMTAgQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJj
ZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVz
dGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVj
dERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRp
bmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVz
WCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNl
aWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgcGFpbnRpbmdEYXRhLndp
ZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRh
LmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKKyAgICBwYWludGlu
Z0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZ
ID0gY2VpbGYocmFkaXVzWSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAppbmRleCA0OGZjMzU0MTE3ZmMyN2NjZmM4ZTkzZjE0ZWRmMDc1ZGUzOWM1
YTExLi5hZTgxNTE1NGNlYWRhZWVkMzI2YTQ0OTM4NzFjZjNlODk3MGRmYmJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmgKQEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzQsNyArMzMsNyBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBG
RU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9s
b2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQg
cmFkaXVzWSk7CiAKICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0TW9ycGhvbG9neU9wZXJh
dG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwpAQCAtNDYsMTMgKzQ1LDExIEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9n
eShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFTW9ycGhvbG9neSI7IH0KKyAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCkBAIC04NiwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTW9y
cGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2NWFh
NDE0MGY2OS4uMDY1MDAxZTAwYjU4ZmM4NTAzMzAxMzdjOGJkNzEzMTU2Zjk3YjE1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zm
c2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZs
b2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFT2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxG
RU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0
IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiB2b2lkIEZF
T2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKQEAgLTUyLDExICs1MiwxMCBAQCB2b2lkIEZFT2Zmc2V0
OjpzZXREeShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBwYWludFJlY3QubW92
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKICAgICBlbHNlCkBAIC02NCwxMSArNjMsMTEgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC03Niw4
ICs3NSw3IEBAIHZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgc2V0
SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1Jl
Z2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0p
KTsKKyAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2R4LCBtX2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdi
MWJmZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uZDNlYzk1YWRkZjEzNDdiNTNlZTA0ODdjNDBh
ZGIxOTAxYWU0NDdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0
IGR4LCBmbG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4
LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAg
ICB2b2lkIHNldER4KGZsb2F0KTsKQEAgLTM3LDEzICszNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXREeShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQg
ZHgsIGZsb2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAg
Y29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7
IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTMsMyArNTAsNCBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi4zODcwN2Iz
MDFmZDExMGJlY2JiMDRlMjVjZmM5ODJhMjA1ZmU2NDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3Vy
Y2U+JiYgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxp
Z2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJF
eHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7CiB9
CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3Bl
Y3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3Vs
YXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVu
aXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0
aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29sIEZFU3BlY3VsYXJM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewog
ICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2Iy
NDk1OGEuLmFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUzMzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMjcsOCArMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNv
bnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRT
b3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRp
YyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJvb2wgc2V0U3Bl
Y3VsYXJDb25zdGFudChmbG9hdCk7CkBAIC0zOSw4ICszOCw5IEBAIHB1YmxpYzoKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRVNwZWN1
bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVTcGVjdWxhckxpZ2h0aW5n
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxU
RVJfRUZGRUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2
NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi5lNzRhNzhjOWUyMTY5MDFhOTVlYWQxYjU5ZTZlZmE5
NWQ5MDQxYzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0zMSwyMiArMzEsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZl
Y3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGls
ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQordm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0
byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlv
ciBvdGhlcndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0g
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC01OCwxMyAr
NTgsMTIgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmxvYXRS
ZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBvaW50IGluTWF4
RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwogICAgIEZsb2F0UG9pbnQgbWF4
RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4t
PmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAg
ICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBpZiAoaW4tPmZpbHRl
clR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRl
clR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIHRp
bGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShm
aWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9u
KCkuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8gdGlsZUltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVS
ZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSk7CiAgICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5
ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uZWQ3Njk1MWZiNWI0MzFkNTM3MmM0
ZDNlZWE1ODU3NTA1M2ZjZDEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yMiwyNyArMjIsMjMgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7Cisg
ICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShG
aWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBm
aWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlw
ZVRpbGU7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5YmI2ZTIwNmEx
ZDJiZmFlYjBjZWE5MTlmMGIuLmQ4MjUzMTYxNzQzYzU2YWFhNTc1ZjUyOTdkZTE3MzFlYzMwNDUz
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGljIGNvbnN0IGlu
dCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQog
c3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3RhdGljIGNvbnN0
IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVu
Y2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUdXJidWxl
bmNlKQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
ZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9i
YXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFz
ZUZyZXF1ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNl
KEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7
CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFz
ZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAogYm9vbCBGRVR1
cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2NiwyMiArMzY2LDIx
IEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNv
bXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFks
IGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmls
dGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKICAgICBJbnRS
ZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9u
LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwg
ZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwg
PSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5lVHJhbnNm
b3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVy
c2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRTaXplIGludmVyc2VT
Y2FsZSA9IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmls
dGVyU2NhbGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVu
ZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAgICAgICBw
b2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBvaW50LnNldFgocG9p
bnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBpbnZlcnNl
VHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhl
aWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBp
bmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0g
NDsKQEAgLTM5MSwxOSArMzkwLDE4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmCiAKIHZvaWQg
RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVy
cy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3Rp
dGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICBwYXJh
bWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRl
cnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0
aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRVR1cmJ1bGVu
Y2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRS
ZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgp
KTsKIAogICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICBkZXN0aW5hdGlv
blBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKQEAgLTQ0MCw3ICs0MzgsOCBAQCB2b2lkIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25Q
YXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSAmZmlsdGVyOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZmZlY3QgPSB0aGlzOwogICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsK
ICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CkBAIC00NTcsNyAr
NDU2LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
fQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMg
bm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4K
LSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBp
eGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBl
IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2Qz
Y2NlY2I1Y2ZiLi41ZTU1MGQ5ZDZiNDA0YjYwNWZhOTE1NDE5MWMzMDA0MmRkMWJkOWEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50
cy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxl
bmNlVHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVy
YnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGlj
IFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwg
Ym9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTk2
LDcgKzk1LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwogCiAg
ICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBm
aWx0ZXI7CisgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVu
Y2UqIGVmZmVjdDsKICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CiAgICAg
ICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwogICAgICAgICBTdGl0Y2hEYXRhIHN0aXRj
aERhdGE7CkBAIC0xMDYsMTkgKzEwNiwxNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQg
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwogCi0gICAgRkVUdXJidWxl
bmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJv
b2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZl
Y3RSZWN0KCkpKTsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hE
YXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBT
dGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9u
KFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0
ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdp
b25Xb3JrZXIodm9pZCopOwogCkBAIC0xMzIsMyArMTMwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEw
YmMxZi4uZjM1ZDliYTQyZmZiMGNhMmUwYzViOGNlY2YzZDYxZDJjN2EwMTc2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDU4ICsyMiw1NyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0OwogCi1jbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZpbHRlciA6IHB1
YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAg
ICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1f
ZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkg
PSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+
JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5n
ZXQoKTsgfQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
dGVyU2NhbGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKLSAgICBGbG9hdFNp
emUgZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsg
fQotICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJl
c29sdXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQorICAg
IEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdl
UmVjdDsgfQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisgICAgCisgICAgRmxv
YXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Cisg
ICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7IH0KIAotICAgIGZsb2F0
IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQg
c2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9Cisg
ICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkg
Y29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlGaWx0ZXIoKSB7IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9z
b3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CisgICAgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQogCiAgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdN
b2RlOyB9CiAgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0
IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZp
bHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwotCiBwcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAg
OiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlvbikKKyAgICBGaWx0ZXIoRmlsdGVy
OjpUeXBlIGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpCisgICAgICAg
IDogRmlsdGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZp
bHRlclNjYWxlKQorICAgIHsKKyAgICB9CisKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRl
clR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikKKyAgICAgICAgOiBG
aWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVy
U2NhbGUpCisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQorICAg
ICAgICAsIG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKICAgICB7CiAgICAgfQogCiBwcml2
YXRlOgorICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVjdCBtX3NvdXJj
ZUltYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1
dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBSZW5k
ZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQg
fTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdm
NjNlNGNjOTI3ZGIxMDguLmUzMzMwYTFmNDY0NTI4ZGE3MzJmZGI2MjhlMjAzMDdmYzFhODRhMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTM1LDI1ICsz
NCwxNCBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0
ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKHR5cGUpCitGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCiB7CiB9CiAKLUZpbHRl
ckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWlu
dFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0
cykKQEAgLTk2LDIyICs4NCwyMiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiAgICAgcmV0dXJu
IHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwogfQogCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUg
aW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgogICAg
IEZsb2F0UmVjdCBzdWJyZWdpb247CiAgICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZl
Y3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0
RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICAgICAg
c3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihmaWx0ZXIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJ
bnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJl
Z2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KTsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVj
dChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CiAgICAgICAg
ICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwogICAgICAgICB9
CiAgICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCk7CisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsK
IAogICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
IG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVU
aWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxl
KQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgp
OworICAgIGlmIChmaWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCisg
ICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAgIGF1dG8gYm91
bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKICAgICBpZiAoaGFzWCgpKQpAQCAtMTI1LDE1
ICsxMTMsMTQgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkKIAogICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdp
b24pOwogCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJh
bnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9
IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2Fs
ZShmaWx0ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gc3VicmVn
aW9uOworICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
ICAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFw
IGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgog
ICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAog
ICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAg
ICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9u
KCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlv
bik7CisgICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJS
ZWdpb24oKTsKKyAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2Nh
bGVkRmlsdGVyUmVnaW9uKTsKIAogICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdp
b24pOwpAQCAtMTYzLDE0ICsxNTAsMTQgQEAgdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKICAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhp
cywgYWxsRWZmZWN0cyk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCit2b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgaWYgKGhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZl
Y3RzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAg
ICAgICAgaW4tPmFwcGx5KCk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOwogICAgICAgICBp
ZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTc4LDQ4MiAr
MTY1LDEwNSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgICAgICB0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKICAgICB9CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7CiAgICAg
c2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFy
aWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJy
ZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQ
YWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAi
IDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
RmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHko
KTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8
ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVk
U3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRS
ZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZp
bHRlciBzY2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQ
cmVtdWx0aXBsaWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRF
ZmZlY3RzKQorICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVk
ZWQoKTsKICAgICB9Ci0gICAgCisKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhl
cmUgYW5kIHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAg
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6
Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVJlc3VsdCgpCiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3Vs
dHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
aW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWlu
dDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlM
ZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIg
Ynl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxB
cnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBp
ZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwg
PSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewot
ICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1
aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7
Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhl
bHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChw
aXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0Owot
ICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVs
QXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBp
eGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNo
ZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkK
LSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUg
NHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMp
OwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVu
dCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
IHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4
ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAg
IC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQorICAg
IG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6
Y2xlYXJSZXN1bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJbWFnZSA9IG51
bGxwdHI7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQog
ewogICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQg
ZWZmZWN0IGhhcwogICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMg
aW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xl
YXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1
dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOworICAgIGNsZWFy
UmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAg
ICAgZWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQogICAgIGlmICgh
aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VC
dWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwot
Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGlu
YXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICBy
ZXR1cm4gbV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0
JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
K1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVk
U2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJy
YXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJl
YSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXks
IHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIHJldHVybiBt
X2ZpbHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6
cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2Nh
bGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkK
KyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAg
cmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRl
cyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBzY2Fs
ZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNr
LCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRS
ZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRl
c3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBk
b2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1h
eFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRT
aXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxl
ZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0g
ICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAg
ICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsK
LQotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsK
LSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAg
ICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7
Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQg
PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9y
aWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0
aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgo
KSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEo
KSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdp
biA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVs
LCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5l
OwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3Jp
Z2luOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3Jj
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRl
czsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkp
OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUu
d2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0
LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1
aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4
X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUo
KTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEo
KTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3Vy
Y2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAg
ICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBz
cmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEo
KSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6
ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRl
c3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29u
c3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1
aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZh
bHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQg
YWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0g
YWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVy
Zm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRv
IGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwg
cGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0
YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZv
cm1hdCgpLmFscGhhRm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiB9CiAKLXN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBG
aWx0ZXJFZmZlY3Q6OmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKLSAg
ICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVm
ZmVyQ29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZm
ZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgp
OwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hl
biBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVk
QnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAg
ICAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJuIGNvbnZlcnRl
ZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKKyAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQog
Ci12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRv
IGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFn
ZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwot
ICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5
SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVz
dFJlY3QpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1h
Z2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRl
ZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGlu
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0g
ICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAg
YXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFj
ZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVm
ZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb24sIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
Y29sb3JTcGFjZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4g
RXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAg
IiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAg
ICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJl
Y3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENv
bG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29s
b3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlu
cHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVk
UGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHJlY3QpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5h
dGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JT
cGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQordm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKQogewogICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJv
bSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewot
ICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihj
b2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRv
RGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsK
LSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAgIEFT
U0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1f
cmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdC
QTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAg
ICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKKyAgICBpZiAoIW1heVByb2R1
Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRl
c3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVz
ICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xh
bXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxl
KCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0
eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0K
LSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAg
ICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3Vs
dFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAg
aWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xv
clNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252
ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAg
IC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0
dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3Rp
bmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBj
b252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9maWx0
ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIAogfQogCiB2
b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0g
ICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAg
IFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhh
c1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2Up
CisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6
IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNv
bnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQg
Zm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0
KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAg
bV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPnRy
YW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiBUZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi40OTc0MjE4
YmUwNjNmNzI3NGIwM2QxMjliZDNmMDc1NTQ4MTk5MDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTI0
LDEzICsyNCwxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2lu
Y2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9u
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Niw2
NSArNDcsMzYgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlw
ZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUlt
YWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24g
ewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVu
ZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAg
ICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNl
TGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywK
LSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0g
ICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAg
ICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAot
ICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNl
R3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lk
IGNsZWFyUmVzdWx0KCk7CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKKyAgICB2b2lkIGNsZWFy
UmVzdWx0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAog
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2
b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0g
c3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUGl4ZWxCdWZmZXIqIHVu
cHJlbXVsdGlwbGllZFJlc3VsdCgpOworICAgIFBpeGVsQnVmZmVyKiBwcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CisKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1h
Z2U7IH0KKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5wcmVtdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJl
bXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQgY29weVVucHJlbXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNv
bnN0OworICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOworCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCog
aW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0
SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwogICAgIAotICAgIGlubGlu
ZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u
IG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQg
aXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAg
ICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAg
IEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0
IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0UmVjdCBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CiAKICAgICAvLyBT
b2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCiAgICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KQEAgLTExNCwyMCAr
ODYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50
UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRl
UGFpbnRSZWN0OyB9CiAKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBG
bG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVj
dDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVj
dFJlY3Q7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3Nh
cnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0
aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRz
IGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9z
aXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgdm9pZCBhcHBseShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVm
ZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0g
ICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRz
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJik7CiAKICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRw
dXQsIERlYnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJl
c2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CkBAIC0xNTYsMTEgKzExOSw2IEBAIHB1
YmxpYzoKICAgICAKICAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KEZsb2F0UG9pbnQpIGNvbnN0OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRl
ciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KICAgICBib29sIGNsaXBzVG9Cb3VuZHMo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KICAgICB2b2lkIHNldENsaXBzVG9C
b3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQogCkBAIC0xODEs
NDAgKzEzOSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZm
ZWN0KEZpbHRlciYsIFR5cGUpOworICAgIEZpbHRlckVmZmVjdChUeXBlKTsKICAgICAKLSAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBB
YnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lk
IGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4
ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxC
dWZmZXImKTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpID0gMDsKIAotICAgIEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlcklt
YWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMjQ4LDEx
ICsxODQsMTcgQEAgcHJpdmF0ZToKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRp
bmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICNlbmRpZgog
ICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZl
Y3RDbGFzc1R5cGU7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVy
VHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApp
bmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5Y2M0Li41OWNmN2RmZTM0
MzYxMWZiMWE2ZjI2NTJmNjYwYjZjMGI4MTkwNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKICAg
ICAKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRl
cmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjVi
YjE1NjM4MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0YWYxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5j
cHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24u
aCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSBmaWx0ZXJU
eXBlKQorICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxp
bmUgY29uc3QgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAg
PSBIYXNoTWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8
RmlsdGVyRnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1
bmN0aW9uOjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7Cisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAi
Q1NTRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwg
ICAgICAgICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9z
ICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVN
YXRyaXgsICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmci
X3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAg
ICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAg
ICAgICAgICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAg
ICAgICAgICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAg
ICAgICAgIkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmcsICAiRkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAg
ICAgICJGRVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAg
ICAgICAiU291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0
dXJuIGZpbHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVz
LmdldCgpOworfQorCitjb25zdCBBdG9tU3RyaW5nJiBGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFt
ZShUeXBlIGZpbHRlclR5cGUpCit7CisgICAgYXV0byBpdCA9IGZpbHRlck5hbWVzKCkuZmluZChm
aWx0ZXJUeXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmlsdGVyTmFtZXMoKS5lbmQoKSk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI3YmU5ODRjNGQxNzc1OGY2NzFhYzJmN2RjNTYxMmY5ZTFkMjI4
ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGaWx0ZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsKKyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAg
RkVNaW5pbXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29s
b3JNYXRyaXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9z
aXRlLAorICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGlu
ZywKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAg
ICAgICAgRkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2Us
CisgICAgICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZz
ZXQsCisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAg
ICBGRVR1cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFw
aGljLAorCisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAg
RmlsdGVyRnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRl
ZmF1bHQ7CisKKyAgICBUeXBlIGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5
cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5
cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBt
X2ZpbHRlclR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV9m
aWx0ZXJUeXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21T
dHJpbmcmIGZpbHRlck5hbWUoVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNv
dXJjZUFscGhhTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9
CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1
cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0IEF0b21TdHJp
bmcmIGZpbHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7
IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9
OyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjbGVhclJlc3VsdCgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9maWx0ZXJU
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxl
bmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFu
c2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFk
b3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMWNlMTRiODA0OTI4ZDU4Yjg0YjU2ODQyNTdlMmIzZmVkMjIzY2RkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYg
VVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlcklt
YWdlOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVy
SW1hZ2UobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSkpOworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1f
bG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5n
TW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1f
Y29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcmVzb2x1dGlvblNjYWxl
LCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IEludFBv
aW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAg
ICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBp
ZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0
KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBj
b3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkK
K3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUu
d2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBp
bnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Cisg
ICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJj
ZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlu
cHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21w
b25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1
OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0
U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1
dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0
ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAg
ICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkp
OworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxw
aGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
MDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9
CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7
CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVs
QnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJ
ZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH0pOwor
ICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50
U2l6ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4
ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShzb3Vy
Y2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkp
CisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+
ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxw
aGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gcGl4ZWxC
dWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1p
bmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAx
KSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRo
ZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFj
ZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9u
YWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVO
VVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
dm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3Bh
cmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBp
ZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0
Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0
YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYg
dGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2Nh
bGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJl
Y3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmln
aW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2lu
IDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsK
KyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5
RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmln
aW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJl
Y3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAg
ICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAo
eEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxl
ZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5h
dGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7
CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3Jp
Z2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hp
bGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBz
b3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRp
b25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAg
ICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZp
bHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7
CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3Bh
Y2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBh
dXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252
ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVm
ZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAg
IHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0
KTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZl
cnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNv
bnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7
CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAg
ICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVy
KHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIo
KmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQg
RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQor
eworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1h
dCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7
CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAg
aWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAg
ICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNh
bFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIg
PSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0
LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZl
cnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhl
bEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBp
ZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChh
dXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVs
QnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdl
Qnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZm
ZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdl
Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJh
dGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBp
bnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0g
aW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5
Lmxlbmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBh
bmQgY29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsK
KworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0
aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4
ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5j
cmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVl
blBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxz
LnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZh
bFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRl
ZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5Q
aXhlbHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChw
aXhlbERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKKyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0
OworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBh
ZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1Q
aXhlbHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhl
bAorICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFt
cCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRp
b24KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICgqcGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAg
ICAgICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3Ig
YWxwaGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdl
Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVu
dHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAg
IGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRv
IGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXIt
PnRyYW5zZm9ybUNvbG9yU3BhY2UobV9jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1f
Y29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
ciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6
bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGNiNWExZjBmMDYzODEzNTNhODFjOTE0ODI4NzI2NzVhOWQyOWZkZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2Ns
YXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBG
bG9hdFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Cisg
ICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
cklmRXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxs
b3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZv
aWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3Jt
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAg
IGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRl
cyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlKSBjb25zdDsKKworICAgIEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmlu
Z01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91
bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBh
ZDZjZjNhMy4uYTU5NmQ0OGU0ZDU5YjYzNTE5YzI4OTc2MjRlMGE0OGNmYTBmYWQwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKQEAgLTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMiwyMiBAQCBSZWY8U291
cmNlQWxwaGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3Qp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9
CiAKLWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFs
cGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJT
b3VyY2VBbHBoYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1
cm4gc19lZmZlY3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0
Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3Vy
Y2VFZmZlY3QpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCit2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoZmlsdGVyKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
CkBAIC02OSwxMSArNjcsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0
czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZm
ZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291
cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVm
ZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5
YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi41MmEzOWE0OTI0MTYxMWUwMTE0
NDE3YTZhMDRmNjZmMDljNjEwMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhh
X2gKLSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJj
ZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3RO
YW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRl
ckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNv
dXJjZUFscGhhX2gKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VB
bHBoYSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3
NGMxMTA3ZDc4MzkyZTkuLmQ2NDVhYTkyNTAyZmE3ZmU2NDQ2NjdkYWYzZTA1NWMwOTgzNmMxYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMjIsMzcgKzIyLDI5IEBACiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKGZp
bHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoKSk7CiB9CiAK
LWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQorU291cmNlR3Jh
cGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlR3Jh
cGhpYykKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlR3JhcGhpYyIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi12b2lkIFNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgU291cmNlR3JhcGhp
Yzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0g
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK3ZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uNmJj
NDdhMWYwMWI1NTYzNjViOTU3OTVlNmEwNWM1YWViMTYzMTJlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgK
QEAgLTE4LDQxICsxOCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3Jh
cGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3Jl
YXRlKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAg
IHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhp
YyhGaWx0ZXImIGZpbHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpT
b3VyY2VHcmFwaGljKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0
ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQog
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0g
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0
KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCi0KLQotI2VuZGlmIC8vIFNvdXJjZUdyYXBoaWNfaAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKFNvdXJjZUdyYXBoaWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMwOWJmMDYz
ZjQ5OTllMDNiMjE5ZTg1ZDdlMmQ5Li5kNjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFj
NGZjMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
TGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlh
VGltZUFWRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmEx
N2FjMTdkYjVjMDJiNWI2MTEuLmRmYmZmOWJmOWYyNTBjZjQxNDc0ZDU3OWRlYWNkZTEyMDM4ZmI4
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xv
ck1hdHJpeC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJG
RURyb3BTaGFkb3cuaCIKQEAgLTM4LDQ1ICszNSwxODMgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2Vk
U1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitS
ZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9y
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmls
dGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAs
IG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVy
OjpDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9y
KQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSkKKyAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4pCisgICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCkpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQorewor
ICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlv
bi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUo
c3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQog
Ci1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQog
ewotICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6
IG51bGxwdHI7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVs
bEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZm
ZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJh
bnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVy
RnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBu
dWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRv
d0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0
aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9u
KCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93
T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRp
b24uY29sb3IoKSwgMSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVH
cmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29s
b3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8v
IFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5k
ZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBh
cmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3
MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcy
MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsK
KworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+
IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0
byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMo
KS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVy
YXRpb24pOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24p
Cit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYg
Y29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
KSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1p
bnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAu
MCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZp
bGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5m
b3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43
NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
ODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAu
MTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisg
ICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRl
cj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZp
bHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jl
c291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBh
dXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAg
aWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjog
ZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAi
IDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmlu
ZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3Bl
cmF0aW9uLmZyYWdtZW50KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQg
dGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1l
bnQuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3Rz
LiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVh
ciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCkBAIC04NSwyMzEgKzIyMCwxMjMgQEAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgRmkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0
byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3Qp
OwotICAgIG1fc291cmNlQWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhh
OjplZmZlY3ROYW1lKCkpOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAg
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAo
YXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVm
ZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVm
ZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
Q1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8g
YnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9CisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAg
IHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVy
LmZpbHRlclNjYWxlKCksIGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJl
Z2lvbigpLCBwcmV2aW91c0VmZmVjdCk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRT
dGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZl
Y3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRp
b25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAg
YnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJl
ZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVj
dHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBl
ZmZlY3Q7CitzdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3sKKyAgICAvLyBVbmxpa2UgU1ZH
IEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmls
dGVyCisgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVp
ciBwcmltaXRpdmUgc3VicmVnaW9ucy4KKyAgICBlZmZlY3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25z
dW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOworICAgIGVmZmVjdC5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAog
Ym9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oKTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rp
b25zLmNsZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCiAgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRy
PFNWR0ZpbHRlcj4gZmlsdGVyOworCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24g
PSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQ
TEVfSU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmls
dGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygx
IC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAg
ICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVy
cy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcx
NTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3
MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8
Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
ewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZj
cy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1
aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0K
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUz
NCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29s
b3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFt
b3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0
aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsK
LSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwg
V1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVE
cm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xv
ci1maWx0ZXIuCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
MDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247
Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMs
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51
bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlh
dGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwg
MCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBz
dGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAg
ICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRy
b3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRv
d09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNW
R0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSwgcmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBu
dWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7
CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAg
IHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAg
ICAgbV9mdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAg
ICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVu
Y3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVy
ZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAg
ICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6
OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5k
KCplZmZlY3QpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJv
cGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAgICAgICAgICAgbV9mdW5j
dGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0g
V1RGTW92ZShlZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0
IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAg
IGlmIChtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOwor
ICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRo
ZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0
ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5k
IG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3Nv
dXJjZURyYXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGlmICghbV9maWx0
ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZp
bHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIG1f
ZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVy
LnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksICps
YXN0RWZmZWN0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dyYXBoaWNzQ29u
dGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3VyY2VJbWFn
ZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgQ1NT
RmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCkKIHsKICAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMzMSw1MyArMzU4LDY4IEBAIHZv
aWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBsb2dpY2FsU2l6ZSA9IG1fc291cmNlRHJhd2lu
Z1JlZ2lvbi5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgp
LnNpemUoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNh
bFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0
U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9k
ZSgpLCAmdGFyZ2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRD
b250ZXh0LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAg
ICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAg
ICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAj
ZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAg
ICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogICAgIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0Zp
bHRlcjo6bGFzdEVmZmVjdCgpCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25z
Lmxhc3QoKTsKKyAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisg
ICAgcmV0dXJuIGRvd25jYXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCiB2
b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIHsKLSAg
ICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBsYXN0RWZm
ZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKKyAgICBhdXRvIGVmZmVjdCA9
IGxhc3RFZmZlY3QoKTsKKyAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigqdGhpcyk7CisgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0
UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBp
bWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZh
Y3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsK
KyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCks
IGZpbHRlclNjYWxlKSkgeworICAgICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7Cisg
ICAgICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsK
ICAgICB9CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQog
ewogICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VB
bHBoYSkKLSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1
dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwor
ICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24t
PmNsZWFyUmVzdWx0KCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCit2b2lkIENTU0Zp
bHRlcjo6YXBwbHlGaWx0ZXIoKQogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgaWYgKG1fZmls
dGVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVm
ZmVjdCk7CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cygqdGhpcywgKmVm
ZmVjdCk7CiAgICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAg
ICAgICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisK
KyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9u
LT5hcHBseSgqdGhpcyk7CisKKyAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRl
cjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzQgKzQz
MiwzMCBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRp
cnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWlu
dDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVm
ZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYg
bV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJl
bmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQogewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9
IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3Qp
OwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCA9IGZhbHNlOwotfQorICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0
ID0gc291cmNlSW1hZ2VSZWN0OworICAgIHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0
ZXJTY2FsZSgpKTsKIAotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZs
b2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0
cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworICAgIEZp
bHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRT
b3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSBmYWxzZTsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3Qo
KSBjb25zdAorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGF1dG8mIGxh
c3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFz
dEVmZmVjdCgpOwogICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2Zp
bHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAg
cmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJl
Y3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICBpZiAoZWZmZWN0LT5oYXNSZXN1bHQoKSB8fCAo
bV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCisgICAg
ICAgIHJldHVybiBlZmZlY3QtPnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRS
ZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7CiAgICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQz
MCw4ICs0NjgsOSBAQCBJbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAg
aWYgKCFtX291dHNldHMuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVm
ZmVjdC0+b3V0c2V0cygpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykK
KyAgICAgICAgbV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4g
bV9vdXRzZXRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBi
OTE5MTdiODA0YzkyZDk0MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uZWUzZGQ5ZmRmNjUxZDYzNTkz
ZmY0ZDkyYzkxYTE2MzM1YWM3ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aApAQCAtMzgsNjkgKzM4LDUwIEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiBjbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCiBl
bnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9u
IH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRp
YyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdl
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsg
fQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChS
ZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsK
LSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsK
IAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCisgICAgYm9vbCBidWls
ZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVy
KTsKICAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwot
ICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3Qo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91
c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7
CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNl
dE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRlcm1l
ZGlhdGVSZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0
KCk7CisgICAgSW50UmVjdCBvdXRwdXRSZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdT
dG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRS
ZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUlt
YWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2lu
Z1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Citwcml2YXRlOgorICAgIENT
U0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0
U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpOwor
CisgICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKLSAg
ICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKICAgICBSZWY8U291cmNlR3Jh
cGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fc291cmNl
QWxwaGE7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogCiAg
ICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKIAotICAgIGJvb2wgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBjMjY2OTYyOTkxNzRiZDZmZDg5YzYy
YjFhMDIyOTZmYTg5ZTRiZDkuLmY3ZTczYjJmNTAxNDhjZDY2YzJiNjlkZWYxYjE0YTUzOTkyZjA0
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIyNiw3
ICszMjI2LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRp
dmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBv
ZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0
LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBh
aW50UmVjdCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5n
RmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigp
LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBh
aW50UmVjdCkpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5j
cHAKaW5kZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZmQ0N2Q3
Mjk3Y2U3YWMwZDkxMDAxYjlkZWEzNWZiNGJlZjk3YjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkK
IAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQog
ewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNy
ZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwot
ICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9
IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAg
ICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmls
dGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUg
ZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwg
c3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChl
LmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1F
OiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0
ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJl
ciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3Bl
cnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmls
dGVyOjpjcmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2Nh
bGVGYWN0b3IpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVn
aW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3Qm
IGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTE0NSw2ICsxMzMsMTMgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5n
U3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsK
KyAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0ZXItPmxhc3RFZmZlY3Qo
KSkgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQg
ZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bworICAgICAgICAvLyBnbyB0
aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBh
cHBseSBhbnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJl
bmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0
ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBk
aXJ0eVJlY3Q7CiAgICAgZWxzZSB7CkBAIC0xNTksOCArMTU0LDYgQEAgR3JhcGhpY3NDb250ZXh0
KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigp
OwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNz
Q29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNz
Q29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKQEAgLTE4
NCwxNCArMTc3LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRvJiBmaWx0ZXIg
PSAqbV9maWx0ZXI7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAg
ICBmaWx0ZXIuYXBwbHkoKTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAogICAgIC8vIEdl
dCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgogICAgIExheW91dFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9w
YWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKIAotICAgIGlmIChhdXRvKiBvdXRw
dXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCisgICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9
IGZpbHRlci5vdXRwdXQoKSkgeworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoeyAx
IC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgp
LmhlaWdodCgpIH0pOwogICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCpvdXRwdXRCdWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIu
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgZGVz
dGluYXRpb25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAg
ICBmaWx0ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkw
YjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0
NGRhMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5
b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVj
dCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3Qm
IGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjU2ZGQx
YzIwNWZmNzY5Njg0YmEwYjcxYzQ0OTBmNWIxYmI0ZWE0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBA
IC04Miw0MCArODIsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZv
ckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52
YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRp
dmVzKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3Vu
dENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0
byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpj
cmVhdGUoZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5n
Qm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRl
ckVsZW1lbnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBi
dWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhl
ZmZlY3QuY29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNl
dFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVm
ZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1l
bnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVt
ZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0
ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNl
bHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRl
ci0+YWRkKGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJl
dHVybiBidWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJl
c291cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xNDMsNDUgKzEwOSwzNiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwg
dG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgot
ICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55
U2NhbGUoKSwgMCwgMCk7CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNm
b3JtLnhTY2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKICAgICAvLyBEZXRl
cm1pbmUgYWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyBy
ZWdpb24uCiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJv
dW5kaW5nQm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmls
dGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lv
biA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVy
RGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmpl
Y3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lv
biwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJv
dW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmlt
aXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRl
ckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIu
IFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dl
ciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFi
c29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUp
OwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgp
KTsKLQotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAgRmxvYXRSZWN0
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb247CisgICAg
YWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVy
U2NhbGUpOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1
dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVp
bGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50
b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAg
IC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVy
ID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRl
ciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxk
ZXIsIGZpbHRlclNjYWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5k
YXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRl
ckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpKTsKIAotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOworICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVm
ZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVj
dCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVj
dCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RF
ZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGlmIChJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUp
KSB7CisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpOworICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKmZpbHRlckRhdGEtPmZpbHRlcik7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdS
ZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4K
QEAgLTE5NCw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKGZpbHRlclNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAw
LCAwKTsKIAogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKQEAgLTI2OSw3ICsyMjQsNyBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
R3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RF
ZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RF
ZmZlY3QgPSBmaWx0ZXJEYXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCiAgICAgaWYgKGxhc3RF
ZmZlY3QgJiYgIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3Qt
PmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJl
IGNhbGxlZCBvbiB0aGUKQEAgLTI4MSwyMSArMjM2LDE2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFw
aGljCiAgICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAo
ZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgogICAgICAgICBpZiAoIWxh
c3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0g
RmlsdGVyRGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwot
ICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Cisg
ICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgqZmlsdGVyRGF0YS5maWx0ZXIpOwogICAgICAg
ICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9
IEZpbHRlckRhdGE6OkJ1aWx0OwogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFn
ZSkgewotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5m
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgp
LCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3Qt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVy
RGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4
MDdjNy4uNjRlM2FjNWFlYWM4MGFkZjllMjZhYjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC00MzIsMTEgKzQzMiwxMyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB0
cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGlj
aCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7
Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFu
c2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAg
IGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdl
dCgpKSkgeworICAgICAgICBGbG9hdFNpemUgZHVtbXlTY2FsZSgxLCAxKTsKKyAgICAgICAgU1ZH
RmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmls
dGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSwgYnVpbGRlciwgZHVtbXlTY2FsZSwg
ZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7CisgICAgICAgIGlmIChkdW1teUZpbHRl
cikgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwogCi0gICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+
bGFzdEVmZmVjdCgpKQorICAgICAgICAgICAgaWYgKGF1dG8gbGFzdEVmZmVjdCA9IGR1bW15Rmls
dGVyLT5sYXN0RWZmZWN0KCkpCiAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJl
c291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJk
NmQwNjQzMWY2ODYuLjA1NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsxMDAs
MTYgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4x
KCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigp
KTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwot
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAg
IAorICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsK
ICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmViYTlh
YmI1ODMyOGY0ZGFiZjM0MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJh
OWMuLmNkZWJlZjE4YTFmZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEw
MCw5IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwK
ICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3Zl
KGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OworICAgIGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdU
Rk1vdmUoZmlsdGVyVmFsdWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIx
MmU3N2JlMjA2YjljNWM0MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBkYmRk
Njk1MjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXgg
OTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgzZWJm
MWVhYzBhZGFiMTExMmZlZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIHZv
aWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHQKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxk
KS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAg
ICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZl
OGI5OTNhNGRkNTQ4NjMuLjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJp
YnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRl
ZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFj
OTgyMzUuLjdmY2VkMmU2NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkgKzEz
MSwxNiBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBm
aWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVm
ZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3Jl
YXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygp
OwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3Rz
LmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisg
ICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsxKCks
IGsyKCksIGszKCksIGs0KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1v
dmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2
NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2YThi
NTNhZmY1NjlkOGQxMWRjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5
UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5k
ZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTljOGI3
ZmMwYTUwNzVlZGU4MWEwZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9p
ZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI0Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAg
ICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVy
WVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFy
Z2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVy
WVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFy
Z2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgp
OworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAg
IHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5
MDQ5YjMzOS4uMWI2YmJlNDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEw
Myw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4
ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4YTEz
NDE1MWRhMzY3ZjRjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNW
R0ZFTGlnaHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXIKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3Vy
Y2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQt
PmxpZ2h0U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsxNzAs
OCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5z
dmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVz
ZUxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VD
b25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQx
IH07CisgICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBz
dXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtl
cm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJhYWM4
YjAzZWQyNGQyMWQ5OGI1MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZk
NzIyZGZkMDUxNzNkOGMyLi42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWExYTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcApAQCAtMTE1LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsK
KyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogICAg
IAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENo
YW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAg
ICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBl
bmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1
dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCks
IHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZm
ZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4u
ZjJjNmQwYjE4Zjg1Yzk0ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1
ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5OWNm
NjIxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTEx
LDEyICsxMTEsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZs
b29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgp
OwogCi0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7
CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3Rk
RGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFk
b3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwg
Y29sb3IsIG9wYWNpdHkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUo
aW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEyYjYy
MWI4Y2JlNDJmNzQ1MWQuLjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4ZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAtNTMs
NyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29k
RWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZj
Mi4uZjMyOGNjN2MxNWVlNzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU1ZH
RkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29uc3QgUXVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2OSw3
IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkp
OwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJl
dHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJu
IEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1
Y2Y1MWZlZTkxMS4uYWVkNjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdh
OTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNkY2E3
NzVjOWI3ZWZhNWRiOWRjODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlv
blkoKSwgZWRnZU1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92
ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDllMjE0
ZmU5NGFlNDEwMDFjZTQ4ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNkYmE1
NDljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODEx
OTVkM2MyN2VjNGYuLjQyYTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQs
MTYgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFy
a0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRo
SW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
V2l0aEltYWdlKG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5j
ZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAgICAg
aWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50LmdldCgp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
V2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2Uo
dHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PFVSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmlu
ZGV4IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYwZWJm
YzI3ZDAxMzliMmMzNzY4NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZp
bmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1
ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMwZDU4
MmQwMTNiODdjZjBlM2MxMTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVyZ2VF
bGVtZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVmZmVj
dCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlucHV0
czsKKyAgICAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZF
TWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1
dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmlu
MSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOwpA
QCAtNjIsNiArNjEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJnZUlu
cHV0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBlZmZl
Y3QgPSBGRU1lcmdlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0gV1RG
TW92ZShtZXJnZUlucHV0cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgw
MmQyODNjZjRlM2MyLi40MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBw
cml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVn
aXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIx
Yi4uOGIwNTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsxMTQs
MTkgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0g
ICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZs
b2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMg
PCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMp
OworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAg
IHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2Njku
LmIyMWI2ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45YjBk
NzAyYTFkMjU4NTQyMDhiOTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZHRkVP
ZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
T2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBp
ZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgaW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1
NzM3MDQ5YmVlLi44OTk2ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29u
c3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0
NTlhODQyOWE1OS4uNTYzYjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
LmNwcApAQCAtMTYwLDkgKzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAg
IGlmICghbGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBh
dXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRl
cik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmls
dGVyQnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5j
b2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxp
Z2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCks
IHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0
aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50
KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExl
bmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2
ZDFjNzlhMWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1MjE2
MjExNjUxMGQwMDliYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3
NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZkNzI0
NjdhYzIwZjRmZmY3ZDRkYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCkBAIC03MCwxNSArNzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9
IEZFVGlsZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92
ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMz
YTkxZi4uY2FiYWNlNmJkMDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0
cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRo
aXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAK
aW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdiOWU4
ZTA4YTQzZTdjY2NiNjgwOWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJl
cXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBi
YXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwg
c3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBGRVR1
cmJ1bGVuY2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZ
KCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBF
X1NUSVRDSCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLjUw
YWY5MTBlYjU4ZTJjOTIyNDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5
WCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApp
bmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li4zOGQ0OTg2MDkz
MzgyMTg3YmFkMjI0ZDI5N2Q0MjVjOTFkZTUzOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0z
OCw3ICszOCw3IEBAIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6
IHB1YmxpYyBTVkdFbGVtZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhGaWx0ZXJFZmZlY3QqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVu
dCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4
NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjIxOTJlODE1YjJjYjYyNzU3
NzgyNzcwZjViMjEzNGM4YjZkZWM0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zNSw0MCArMzUsNDMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQ
dHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNl
cnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkK
K0ZFSW1hZ2U6OkZFSW1hZ2UoUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0
KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAg
LCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotRkVJ
bWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCitG
RUltYWdlOjpGRUltYWdlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYs
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
KyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBt
X3RyZWVTY29wZSgmdHJlZVNjb3BlKQogICAgICwgbV9ocmVmKGhyZWYpCiAgICAgLCBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+
IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBp
bWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+
IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdl
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFn
ZShpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFn
ZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVl
U2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJUklSZWZlcmVuY2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhy
ZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUlt
YWdlKHRyZWVTY29wZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi12b2lkIEZF
SW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVJbWFnZTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmxvYXRS
ZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Q7CiAgICAgaWYgKG1faW1hZ2UpIHsKICAg
ICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBl
bHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQot
ICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJl
bmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICB9IGVsc2UgaWYg
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwor
ICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAg
ICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVm
ZmVjdFJlY3QoKSk7CkBAIC04Nyw3ICs5MCw3IEBAIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJl
ZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5k
ZXJlcigpOwogfQogCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lk
IEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwogICAg
IGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCkBAIC05NiwxNiArOTksMTggQEAgdm9pZCBGRUlt
YWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUg
YWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCiAgICAgc2V0UmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
KyAgICBkZXN0UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIo
KS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOwotICAgIGVsc2UgeworICAgIGlmIChyZW5kZXJlcikgeworICAgICAg
ICBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Cisg
ICAgICAgIHNyY1JlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOwogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCk7CiAgICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
LSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBj
b250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgICAgICBSZWZQdHIgY29u
dGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAg
ICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYw
ZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmM0MjEzY2FmNzJjZjY0OWExZWMx
ZjJkN2EyMWU0ZmFiZWQyNDM3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTM0LDIyICszNCwxOCBAQCBjbGFzcyBUcmVlU2Nv
cGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQ
dHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0
aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3Bl
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Cisg
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
fkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRl
ciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUltYWdlIjsgfQotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAg
RkVJbWFnZShSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
KTsKKyAgICBGRUltYWdlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJl
bmRlcmVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFs
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKKyAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdl
OwpAQCAtNjEsMyArNTcsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4
IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjgzZjM0MWFkMzQ1N2Nk
NGExMWEzMGQ1MmNiYzkyNzFkZjAyYTkzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsMjkgKzIyLDgxIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdG
aWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5n
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNv
bHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0
JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1
aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgZmlsdGVy
UmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0
ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0
ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJS
ZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHBy
ZXZpb3VzRWZmZWN0KQoreworICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmls
dGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWDsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBT
VkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXBy
ZXZpb3VzRWZmZWN0KQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNl
R3JhcGhpYzo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0
aW5FZmZlY3RzKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRC
b3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVV
bml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZm
ZWN0ID0gYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYg
KCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKKyAgICBpZiAobGFz
dEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElu
cHV0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZl
Y3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmls
dGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAg
IDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJv
dW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9l
ZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVn
aW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9h
dFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUp
IGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6
ZSBzaXplKSBjb25zdAogewogICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQogICAgICAgICBzaXpl
ID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOwogCi0gICAgcmV0dXJuIEZpbHRl
cjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJTY2FsZShzaXplKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUlt
YWdlKCkgfSk7CisgICAgYXBwbHlGaWx0ZXIoKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5
RmlsdGVyKCkKK3sKKyAgICBtX2xhc3RFZmZlY3QtPmFwcGx5KCp0aGlzKTsKK30KKworSW50T3V0
c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZl
Y3QtPm91dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2Rl
KQordm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1Jl
Z2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsK
KyAgICBtX2xhc3RFZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAw
Y2YuLmZlODIyZDgxZjljY2E0NjExMGE4N2UyYjA0ODhmMzZlMGFlMGJlODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw0MSAr
MjAsNDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVD
YXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7
CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJs
aWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZp
bHRlclJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmls
dGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxk
ZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUm
IGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBz
Y2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhcHBs
eShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKCkgb3ZlcnJp
ZGU7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAg
ICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0K
KyAgICB2b2lkIHNldExhc3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0
KSB7IG1fbGFzdEVmZmVjdCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAg
ICBTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29s
IGVmZmVjdEJCb3hNb2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVm
ZmVjdEJCb3hNb2RlKTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGlu
Z0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikK
ICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsg
cmV0dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24u
aXNTVkdGaWx0ZXIoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hODZj
MGE5Y2M5OWNjY2MzNTg1M2QzY2QyNDkwMjc4NDZmYmFhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApA
QCAtMjAsMjAgKzIwLDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxl
bWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAK
KyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmls
dGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VH
cmFwaGljKQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxG
aWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0
aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3Jl
YXRlKCpzb3VyY2VHcmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRl
KHNvdXJjZUdyYXBoaWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50
ZXJwb2xhdGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1l
bnQpCit7CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAg
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVl
IGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50
ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9
CisjZW5kaWYKKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRG
aWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmls
dGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGVm
ZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkg
eworICAgICAgICAgICAgY2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0
Qm91bmRpbmdCb3gpKTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0
RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5l
YXJTUkdCKCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxl
bWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZmZWN0RWxl
bWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZWZmZWN0OworfQor
CiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRy
PEZpbHRlckVmZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaAppbmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li5iN2I4
MjRiNDg0MzIzMjU3N2QyMTMwZDg0NmFhYzhiN2YwOWRlOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0Zp
bHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94
KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZs
b2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRp
bmdCb3g7IH0KQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3Rz
KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAg
ICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhp
Yyk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRl
ckVsZW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0
cygpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDY2YzNhYTIxNDM2ODY4YTU0MGZjNjI5Y2UyMWNlMjYyOGE3OTJj
ZmUuLmFlODc2MzE0YTYxNjMxYWRlYWJiMTE3MmJmNTE3ZjcyMjE4ZDFkODIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAyMS0xMS0wMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNv
bT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVz
dWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlv
bnM6CisKKzIwMjEtMTAtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJv
bSBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCB0d28gZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVz
dEV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAt
MzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQ
cm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMjEtMTAtMzAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgTGF5ZXIgdHJlZSBzaG91bGQgbm90IGJlIHN0dWNrIGluIGZyb3pl
biBzdGF0ZSBhZnRlciBleHBsaWNpdGx5IHN0b3BwaW5nIGEgcGFnZSBsb2FkCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCBlOTFmNDFlODgyZDU2ZWMxOWM2ZTVmMjIyZTlmN2Y1M2U0NmJiODFlLi5mYWJk
Y2VmZDAwODEwNjlmMTM1MzY3ZDkxMjQ2ODcyN2Q5ZmJkOGMyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTUxODYsMyArNTE4NiwxOCBAQCBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1
Z2lucy10eXBlcy1ibG9ja3MtcXVpY2t0aW1lLXBsdWdpbi1yZXBsYWNlbWVudAogc2VjdXJpdHkv
Y29udGVudFNlY3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMtYmxvY2tzLXlvdXR1YmUtcGx1Z2lu
LXJlcGxhY2VtZW50LXdpdGhvdXQtbWltZS10eXBlLmh0bWwgWyBTa2lwIF0KIHNlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS9wbHVnaW5zLXR5cGVzLWJsb2Nrcy15b3V0dWJlLXBsdWdpbi1y
ZXBsYWNlbWVudC5odG1sIFsgU2tpcCBdCiB1c2Vyc2NyaXB0cy91c2VyLXNjcmlwdC1wbHVnaW4t
ZG9jdW1lbnQuaHRtbCBbIFNraXAgXQorCisjIFRoZXNlIGZhaWx1cmVzIHNob3VsZCBiZSBmaXhl
ZCBvbmNlIHdlYmtpdC5vcmcvYi8yMzEyNTMgaXMgcmVzb2x2ZWQKK3dlYmtpdC5vcmcvYi8yMzEy
NTMgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1uZXN0ZWQtc2hhZG93LW92ZXJsYXBzLWh3LW5lc3Rl
ZC1zaGFkb3cuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBjb21wb3NpdGlu
Zy9maWx0ZXJzL3N3LXNoYWRvdy1vdmVybGFwcy1ody1sYXllci5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBz
LWh3LXNoYWRvdy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGNzczMvZmls
dGVycy9maWx0ZXJzLW9uLXN2Zy1yb290Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzEyNTMgY3NzMy9maWx0ZXJzL3N2Zy1ibHVyLWZpbHRlci1jbGlwcGVkLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgZmFzdC9maWx0ZXItaW1h
Z2UvZmlsdGVyLWltYWdlLWJsdXIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzMTI1MyBmYXN0L2dyYWRpZW50cy9jb25pYy1ncmFkaWVudC1leHRlbmRlZC1zdG9wcy5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGltcG9ydGVkL21v
emlsbGEvc3ZnL2R5bmFtaWMtZmlsdGVyLWNvbnRlbnRzLTAxYS5zdmcgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZmlsdGVycy9m
ZUNvbXBvc2l0ZS0yLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1
MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlU3BlY3VsYXJMaWdodGluZy0xLnN2ZyBb
IEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9mZUxp
Z2h0aW5nLWNsaXBwZWQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMx
MjUzIHN2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2ZyBbIEltYWdl
T25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9mZUltYWdlLWNv
bG9yLWZpZGVsaXR5LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443067</attachid>
            <date>2021-11-02 01:31:48 -0700</date>
            <delta_ts>2021-11-02 02:11:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211102013147.patch</filename>
            <type>text/plain</type>
            <size>312358</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uYzAxZjBlMWU3ZGJmZjE5NzI3Zjc5OTU5MjA0N2Jk
ZjRmNmE2ZTQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyMSBAQAorMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5n
IHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMg
aW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQnLiBUaGlzIHdpbGwKKyAg
ICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2ls
bCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3Ns
eSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9uLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0
ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxs
aW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNy
ZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9y
IGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBj
cmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICByZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcHBvc2l0ZSAKKyAgICAg
ICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkuIENvcnJlY3RpbmcgdGhl
IHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJp
bmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZm
ZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERl
bGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3Zl
ZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNS
ZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVyRWZmZWN0LCB3ZSBhcmUK
KyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIHRvIHRoZSBG
aWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBuZWVkZWQuCisKKyAgICAg
ICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVu
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1h
Z2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNl
cGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6bGFzdEVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAg
ICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVp
bGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
Lmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmls
dGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQgYXMg
YW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24g
aW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFz
c29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIg
d2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0
ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhl
IHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgor
ICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNp
bmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhl
IFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRv
IGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlv
biBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEg
cG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5k
IENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRl
ciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZp
bmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0
IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVt
ZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhl
IHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhD
bGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2lu
ZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRo
aXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBk
aXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVm
ZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVG
YWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNp
emUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAg
ICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNr
ZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29v
cmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAg
ICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQg
Im1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpm
aWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJT
Y2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisK
KzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhl
IGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBo
b2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhp
cyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0Cisg
ICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24g
aW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rp
b24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVy
RWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJl
cGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAg
ICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNW
R0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
ZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6
OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9s
bXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdyZW9yZGVyLWN0b3IgaW4g
Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3ZGMzYmQyY2VkMTE4NGMy
ZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4MTFjOGNiY2M5YjE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzU1
YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLjZlNjI1OTliZjY3YTk4OTExZDFi
ZTJlNDY3NzRmODlmZDg5N2JjZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3IEBACiAJCTcyNEVEMzMy
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyog
SlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyog
QWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgw
RDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8q
IEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLzsgfTsKIAkJ
NzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyog
TmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmls
dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1By
b3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0
b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0MjI0MUJG
QjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZl
UHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFu
aW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU3MSw2ICsxMDU3NCw4
IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0
RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0
MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZE
IC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMkIy
NzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDEx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
N0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
NjQ0LDExICsxODY0OSwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdl
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1OUI1OTc3
MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAotCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4
MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
LywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgKi8s
CiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywKKwkJ
CQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5Q0UyMEQ3RTJC
ODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdDMzk4MyAvKiBy
dW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5ODMgLyogcnVu
dGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X21ldGhvZC5jcHAgKi8sCkBAIC0yNTI5MSw2ICsyNTI5NiwxMCBAQAogCQkJCTA4QzkyNTE4MEZD
QzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBC
MDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRD
MEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAorCQkJCTcyNjJENzU3
MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2MkQ3NTYy
NzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzI2QkUwMjkyNzJG
QjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3MkZCMTcy
MDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApAQCAtMzI3ODMsNiArMzI3OTIsNyBAQAogCQkJ
CTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCRTAyRDI3MkZC
MTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZF
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmlu
ZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3NzAuLmUwN2Y1NGEzNmQz
MmEyMzNiMzA3NjZjNGQ3NjYyMmU2OGVjZjA0OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiwyMCArMTE2LDIyIEBAIFJlZlB0cjxJbWFnZT4g
Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAg
ICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkK
KyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwor
ICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmlu
Z01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOworICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJ
bWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsK
LSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAg
ICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNv
dXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsK
IAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0
ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0
U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdp
b24oaW1hZ2VSZWN0KTsKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1f
ZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgCisgICAgY3NzRmlsdGVyLT5z
ZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBpZiAoIWNzc0ZpbHRlci0+
YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRl
ckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3Nz
RmlsdGVyLT5hcHBseSgpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3Zl
KHNvdXJjZUltYWdlKSk7CisgICAgY3NzRmlsdGVyLT5hcHBseUZpbHRlcigpOwogCiAgICAgYXV0
byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKICAgICBpZiAoIW91dHB1dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXggZTZjOGRm
NGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0NGFmNy4uZTdiYzg1MzI3MmFiNGRhZjdjOWI4
NTAxODZjYzk5YTk3NDRmOTM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFy
ZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0cHV0
SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7CiAgICAgRmxv
YXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwpAQCAtNTUs
MTIgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgp
OwogICAgIAogcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVy
cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKTsKICAgICB2b2lkIHJlbmRlclRvSW1hZ2VC
dWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3Jl
SW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAgUmV0YWluUHRyPENJSW1h
Z2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0YWluUHRy
PENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImKTsKICAgICBSZXRh
aW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgm
LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2Zl
ciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1h
Z2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOTdlMTEzN2IyOWQ3MWMy
YjU0NDE1NzMwNjcyNDAwYjgyNDI4YjM2MS4uOGI0MDAxNzcwMGUxMGM2ODdiYTcwNmU1NTk2Yjhj
MGIyMzBiYTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5tbQpAQCAtNzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFy
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlCiBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRl
cmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVy
biB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVm
ZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRl
clR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNv
bG9yTWF0cml4OiB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZm
ZWN0KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKQEAgLTg4
LDkwICs4OCw1NiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgogICAgICAgICByZXR1
cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29t
cG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRv
dzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxl
bmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OmFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBsYXN0RWZm
ZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxhc3RFZmZlY3Qp
OworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgbGFzdEVmZmVj
dCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgcmVuZGVy
VG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKIH0KIAotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYg
ZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Ojpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dEltYWdlczsKICAg
ICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAg
YXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOworICAgICAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgKmluKTsKICAgICAgICAgaWYgKCFp
bnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlucHV0SW1h
Z2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCk7CisgICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZp
bHRlcik7CiAgICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiAgICAgCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAg
c3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGVm
ZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhkb3duY2FzdDxT
b3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29s
b3JNYXRyaXg6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZmlsdGVyKTsK
KyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKICAgICAgICAgcmV0
dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3Qp
LCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRy
YW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRvd25jYXN0PEZF
Q29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKIAotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5j
dGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BTaGFk
b3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVs
ZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCitSZXRhaW5QdHI8
Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3Jh
cGhpYyhjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTI3Niw3ICsyNDIsNyBAQCBJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0CiB2b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSwgbGFzdEVm
ZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgbV9vdXRw
dXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IDEsIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwog
ICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewogICAgICAgICBjbGVhclJlc3VsdCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0yODgsNyArMjU0LDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZl
Y3QKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3QoY29u
c3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAogewogICAgIEludFNpemUgZGVzdFNp
emUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGRlc3RTaXpl
LnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0
IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNpemUpOwogICAgIHJldHVy
biBkZXN0UmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZi
MGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uMzY3NzJiMGYzZWE5NGU4NWU2NDJjNGJh
MGY2OWQwNzI3NzQwMDQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywx
MiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CmluZGV4IDVhYzdmNDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFkY2RiNjYuLjU2NDRmZWE3
YmY3N2I2NGZlZmY3ODUzNTA1MzQ1MTI3ZTRhNGNhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMzQsMTUgKzM0
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXIm
IGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpCbGVuZCkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwgbV9tb2RlKG1vZGUpCiB7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGUgbW9kZSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCiBib29sIEZFQmxlbmQ6
OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDEyICs1NCwxMiBAQCBib29sIEZF
QmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAogI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2
b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBp
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2
Li5lZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMjMs
MjIgKzIzLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXImLCBCbGVuZE1v
ZGUpOworICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZSk7CiAKICAgICBC
bGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBz
ZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9CisgICAgRkVCbGVuZChC
bGVuZE1vZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
ICAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LApAQCAtNDYsMTAgKzQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVu
ZE1vZGUpOwotCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxlbmQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcAppbmRleCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0N2E0MjEwYzI4NTQzMzJi
YTFkM2U1Li5iNjY0ZjI5ZTY0OTFhODlmZjM3NzkyMWUyYzJmYTk2YTI3ODEyNTVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKQEAgLTM1LDE2ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0
cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeCkKICAgICAsIG1fdHlw
ZSh0eXBlKQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewogfQogCi1SZWY8RkVD
b2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDb2xvck1h
dHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKK1JlZjxGRUNvbG9yTWF0cml4
PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9h
dD4mJiB2YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChm
aWx0ZXIsIHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wgRkVDb2xv
ck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTI3MywxMSArMjczLDEx
IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2FjNGRiNTUyNGVmYTRj
MTIzZi4uMjI5ZmYwYjhjNDRmNTFjMGVmMDU0ZTVlYTJhNDI0NmUyMjdkODdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcgQEAgZW51bSBDb2xvck1h
dHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwg
Q29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8RkVDb2xv
ck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAogICAg
IENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9v
bCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC01MCwxMSArNDgsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0ZToKLSAgICBGRUNvbG9yTWF0cml4
KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKLQotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7
IH0KKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMsNyArODksNCBAQCBpbmxp
bmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJu
IGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEw
Y2NmNTc0MDJmOWU2My4uODhlNTlmNTA4OTRlN2Q0ZjA3ZmFiMTlmNGU0M2Y4NmMzN2YzYzkzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5ICszMyw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitGRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAgICwgbV9y
ZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0
aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpAQCAtNDMsMTAgKzQyLDEw
IEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVmPEZFQ29tcG9uZW50VHJh
bnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0ZXIs
IHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24p
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKHJlZEZ1bmN0
aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKIH0KIAog
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJs
ZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAtMTA0LDExICsxMDMsMTEg
QEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJs
ZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMSw3ICsxMjAsNyBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
Y29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBo
YVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQoZGVz
dGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
ICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBp
eGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9uUGl4ZWxB
cnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zm
c2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4
NzExOWM0ZWIzNDhhNTEuLjZhZmVlNWU5Njg2MTcxMzc0MWUzOTlhNjhiNTFmMzk0MDgzZjA0M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Myw4
ICs1MSw3IEBAIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xhc3MgRkVD
b21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29t
cG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dy
ZWVuRnVuY3Rpb247IH0KQEAgLTYyLDEwICs1OSw3IEBAIHB1YmxpYzoKICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FscGhhRnVu
Y3Rpb247IH0KIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwotCi0gICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KKyAgICBGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PjsKIApAQCAtNzcsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdy
ZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxl
KTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODksNiArODMsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVj
dC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFuc2ZlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKaW5kZXggODMzNTMwOTA4MWEyNmJhMmMzMWMzYmRhYzg4ODY2OWUyOGUzNDU2
ZC4uMmI4NzkyNDBlMWNiODZlMGI4ODhlMTNiODYzNjM2Y2VmMzBiZmZjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBv
c2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQorRkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVDb21wb3NpdGUpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fazEo
azEpCiAgICAgLCBtX2syKGsyKQpAQCAtNDIsOSArNDIsOSBAQCBGRUNvbXBvc2l0ZTo6RkVDb21w
b3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUs
IGZsbwogewogfQogCi1SZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0
ZTo6Y3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZSh0eXBlLCBrMSwgazIsIGszLCBrNCkpOwogfQogCiBi
b29sIEZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBl
KQpAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGll
ZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBj
KQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihjKSwgMjU1LCAwIH07CkBAIC0yMDEsNyArMTkzLDcgQEAgaW5saW5lIHZvaWQgRkVDb21w
b3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CkBAIC0yMTgsMjUgKzIxMCwyNSBAQCB2b2lkIEZFQ29t
cG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAgICAgIHJldHVybjsKICAg
ICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVj
dHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
KyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90
eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CiAgICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0IGVmZmVj
dEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
ICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTI0
Nyw3ICsyMzksNyBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJh
ZTJmNzZhZWEwYzMuLjE0MzU4ZGMzY2Y2YzFmZDljZWNhYzcyZWQ5NTI5MThhNmU1ODJkMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArMzksNyBAQCBl
bnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFzcyBGRUNvbXBvc2l0ZSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNy
ZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwog
CiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsK
QEAgLTU4LDE4ICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVy
biBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29s
IHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90
eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAg
ICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0ZShj
b25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQp
OwogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBi
b29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCk7CkBAIC05MCwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1
NmVjMjkzM2MwZTk5ZjA1MC4uNjgxNzQ0ZWE0MjQwZTkxNDVkY2M5YzU4YjI2NTc2ZjkxZGM4NWM3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zMiwxMCArMzIsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNv
ciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCitGRUNvbnZvbHZlTWF0
cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwg
bV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAs
IG1fYmlhcyhiaWFzKQpAQCAtNDksMTEgKzQ3LDkgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252
b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAg
ICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZl
TWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IElu
dFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZp
c29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2
aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKICAg
ICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAKQEAgLTM2NywxMSArMzYz
LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxz
PGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IHVucHJlbXVsdGlwbGllZFJlc3VsdCgpIDog
cHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0zODEsMTUgKzM3NywxNCBAQCB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAg
ICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGlu
LT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRTaXplIHBhaW50
U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQorICAgIAogICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEgPSB7CiAgICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAogICAgICAgICBkZXN0aW5hdGlv
blBpeGVsQXJyYXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdl
ZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjk1NzZkZmVlN2U4NDJjYWY0NjUwODVhZDcxYmM3MGUy
ZjVhYWY1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0yNCw3ICsyNCw2IEBACiAKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1vZGVUeXBlIHsKIAogY2xhc3MgRkVDb252
b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IEludFNpemUmLAotICAg
ICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29u
c3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7
CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRh
cmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFNp
emU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6ZSYpOwpAQCAtNzcsMTQg
Kzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4Owog
ICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNpemUmLCBm
bG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwg
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBGRUNv
bnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZs
b2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4IjsgfQorICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0K
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTExNSwzICsxMDksNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5mNzZjZTJj
ZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhhNDA3ZDEzNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVE
aWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29u
c3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIs
IERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29u
c3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK0ZFRGlmZnVzZUxpZ2h0aW5n
OjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQorICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZh
Y2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVs
VW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
RGlmZnVzZUxpZ2h0aW5nKQogewogfQogCi1SZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVz
ZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5n
OjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VM
aWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVz
ZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKICAgICBpZiAobV9kaWZmdXNlQ29u
c3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRm
NjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjhhMTBhZWM4N2M4ZjE4OWY5
ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTI5
LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7CiAKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5n
IDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNl
TGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxp
Z2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KICAgICBib29sIHNldERpZmZ1c2VDb25z
dGFudChmbG9hdCk7CkBAIC0zOCw4ICszNyw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNm
YTEuLjY1NjYzZDkyOTY3ZWE2ZjdmMGJhY2MzNWMxN2UzZmMwMTAzNWFiNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0zMSwxOCArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0
ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAsIG1feENo
YW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9y
KHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3NjYWxlKHNjYWxlKQogewogfQogCi1SZWY8RkVE
aXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIs
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50
TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0
ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNo
YW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0
WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0
b3IpCkBAIC05MSw3ICs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9m
UGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAgcmV0dXJu
IHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwpAQCAtOTksMjkgKzk4LDI3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAh
PSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hB
Tk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVj
dEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+
Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVj
dCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5n
IHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24t
cHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9
IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgYXV0byBk
aXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJE
cmF3aW5nUmVjdCk7CiAgICAgCiAgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgp
ID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
IAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
eyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBzY2FsZUZv
ckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAu
NSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3
MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uNmVlNjhiMTA4ZGI3M2IwNzA0
ZmZlZDljNTEwYjQyM2ExYzc1YWRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMjIs
NyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNyBAQCBlbnVtIENoYW5uZWxTZWxlY3RvclR5
cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShGaWx0ZXIm
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIHN0YXRpYyBSZWY8RkVEaXNw
bGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCiAg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAgYm9vbCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0
IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAtNTIsMTMgKzUxLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQorICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAgICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CkBA
IC03MiwzICs2OSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlzcGxhY2VtZW50TWFwKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgwOTIxNmU0YjIyNDM1MTE4NjIzZTI4ZmZkNjFl
ZmEuLjZhOTZjYTk5MDkxYWFhY2MzYjNkMGJlMmFlZTk1MjM0OWFiMmI2MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAot
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBm
bG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJv
cFNoYWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0
ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVE
cm9wU2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAs
IG1fZHgoZHgpCkBAIC00MiwxOCArNDIsMTYgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3co
RmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG8KIHsK
IH0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNoYWRvdz4g
RkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3Rk
WSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBz
aGFkb3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpCit2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLQogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0
KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNldFBh
aW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qu
bW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Cisg
ICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRl
T2Zmc2V0UGFpbnRSZWN0KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKQEAg
LTcwLDE5ICs2OCwxNiBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCit2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0g
MiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
LSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkg
fSk7CisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOwogCiAgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1Jl
Z2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2UwNTczNGVlODhh
MjllZmYzODRjLi4xNzcwNTZiYmNmODgzZTY0YmQxNGUxYzRmODViNzRkZjY3M2ZjNDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYs
IGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25z
dCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3Rk
WCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxMyArNDcsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0
eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAgICBGRURyb3BTaGFkb3coRmlsdGVy
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAg
IEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSk7CiAKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRHJvcFNoYWRv
dyI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAg
IEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC03MCwzICs2Nyw0IEBA
IHByaXZhdGU6CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUz
NGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi5jNTcwZDljNTVlZjY1MzE2NDgwZDVj
ZTg5YmE3MjU0MjdlYjY3YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZs
b29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKICAg
ICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0KIAotUmVmPEZFRmxvb2Q+IEZF
Rmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZs
b2F0IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29s
b3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsK
IH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAg
LTU4LDkgKzU4LDkgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RP
cGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5k
ZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uYTIwNzgxOTJlNjY4
NjVkNzI4ZDRhZTQ3MzM0YWIxNDhjYjE0ZDg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIyLDE0ICsyMiwxMyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0
aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxv
b2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7
CkBAIC00NSwxMyArNDQsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRkVG
bG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29kKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQorICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTYxLDMgKzU4LDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMGY2ZWU4N2Y5NWU3
NTc1MTg2M2ZkMmU1ZjU0OWU3NGQ5NzI5ZGIxZi4uMTM2ZjY4YWFmNzdkOGIyNTAzYmJkZjZmNGQ4
ZThiNTg4YjExNzExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTc5LDE3ICs3OSwxNyBA
QCBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQm
IHJhZGl1cywgaW50JiBkZWx0YUxlZnQsCiAgICAgfQogfQogCi1GRUdhdXNzaWFuQmx1cjo6RkVH
YXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlw
ZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNzaWFuQmx1
cikKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAg
LCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1
c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2Rl
KSk7CiB9CiAKIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkK
QEAgLTQ4NSw3ICs0ODUsNyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAg
cmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZShzdGREZXZpYXRpb24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAtNDk2LDkgKzQ5Niw5IEBA
IEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEludFNpemUg
a2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0
ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJl
Y3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAvLyBFZGdlIG1v
ZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCBy
ZWN0LgpAQCAtNTE5LDExICs1MTksMTEgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MzYsMTEgKzUzNiw5IEBAIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUga2VybmVs
U2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwog
CiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgYXV0byB0bXBJ
bWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWlu
dFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2
NDdjYmIyZDNlLi43Njk2MjNhZmE1NDJjMGQ4NjI1YWRkYTA1OTI1MGY1ODVlMDUzYWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3Np
YW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBl
KTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJl
dHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAtNDUs
OSArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6
ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1
cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsgfQor
ICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKICAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAKQEAgLTY0LDkgKzYxLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CiAgICAgfTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04MywzICs4MCw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJf
RUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggNjU5YjEwNTVmNjFlYWFi
YzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uZmJkNTAzOTAyYmNjNThlZjUzNGY4NWE5OTEwYzRj
N2FiNzA1YzM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zNSw4ICszNSw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGln
aHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlw
ZSB0eXBlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKK0ZFTGlnaHRpbmc6OkZF
TGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdo
dFNvdXJjZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRWZmZWN0KHR5cGUpCiAgICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCiAgICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCkBAIC00NzEs
MTEgKzQ3MSwxMSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBi
MGJiNzBhMTRkMTc0OTUwNjczN2U4OGUwNTE0ZWU3OTY4MjBhNDQ5Li5kODUyZjhiMTNkZDc5N2Y4
ZTg5OTM1MWY4YjU4ZDM1ODVhMDNmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjcsNyArMjcsNiBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgpAQCAtNDAsNyArMzksNyBAQCBzdHJ1Y3Qg
RkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2Nh
bGUoZmxvYXQpOwpAQCAtMTI4LDE2ICsxMjcsMTQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1l
dGVycyopOwogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRp
bmdQYWludGluZ0RhdGFGb3JOZW9uKik7CiAKLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0
aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQorICAgIEZFTGln
aHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKIAogICAgIGJvb2wg
ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwogCiAgICAgdm9pZCBz
ZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7CiAgICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5k
ZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uZmJmNTAzOTA5ZmM4
ZjhhM2RhYWRlNTY5MDMwOTdiMTRjZDVhZjY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yOCwyMiArMjgsMjIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmls
dGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitGRU1lcmdlOjpG
RU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWVyZ2Up
CiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitS
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoKSk7
CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVNZXJn
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgdW5zaWduZWQg
c2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKIAot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5
ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uMDUxOWE1Njg4YTgzNjNmYzFiYTA2MzIw
NGRiMjJmNzQzMWFlMzRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIyLDIzICsyMiwyMSBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAg
c3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZp
bHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggNmFl
M2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1OGRhZWQ2Yi4uNWY3NGNmZDc0ZmI4Zjk4NTQz
OTZiNzU3YTRhYzIwZGI0YjYxODczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMzUsMTcgKzM1
LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xv
Z3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1v
cnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZl
Y3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkK
ICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9
CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
LCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFk
aXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRp
dXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3Bl
cmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQpAQCAtNzIsMTEgKzcyLDEwIEBAIGJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Cit2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBp
ZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVj
dFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjQwLDExICsyMzksMTEgQEAgYm9vbCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFy
cmF5LCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgsMTIgKzI1NywxMSBAQCB2b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAocGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVz
LndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAg
aWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICByYWRpdXMgPSBm
bG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNY
LCBtX3JhZGl1c1kgfSkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogICAgIGludCByYWRp
dXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0
aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdo
dCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIApAQCAtMjczLDEwICsyNzEsMTAgQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVs
QXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRp
b25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRh
LmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJh
ZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgcGFpbnRpbmdEYXRhLndpZHRoID0g
Y2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdo
dCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKKyAgICBwYWludGluZ0RhdGEu
cmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2Vp
bGYocmFkaXVzWSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaAppbmRleCA0OGZjMzU0MTE3ZmMyN2NjZmM4ZTkzZjE0ZWRmMDc1ZGUzOWM1YTExLi5h
ZTgxNTE1NGNlYWRhZWVkMzI2YTQ0OTM4NzFjZjNlODk3MGRmYmJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
QEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQs
NyArMzMsNyBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBo
b2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
TW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBj
cmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CiAKICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUpOwpAQCAtNDYsMTMgKzQ1LDExIEBAIHB1YmxpYzoKICAgICBi
b29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0
ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZ
KTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFTW9ycGhvbG9neSI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOwogCkBAIC04NiwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTW9ycGhvbG9n
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2NWFhNDE0MGY2
OS4uMDY1MDAxZTAwYjU4ZmM4NTAzMzAxMzdjOGJkNzEzMTU2Zjk3YjE1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
QEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpG
RU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4
LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zm
c2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNl
dD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQor
UmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiB2b2lkIEZFT2Zmc2V0
OjpzZXREeChmbG9hdCBkeCkKQEAgLTUyLDExICs1MiwxMCBAQCB2b2lkIEZFT2Zmc2V0OjpzZXRE
eShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZsb2F0UmVjdCBwYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBwYWludFJlY3QubW92ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsK
ICAgICBlbHNlCkBAIC02NCwxMSArNjMsMTEgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC03Niw4ICs3NSw3
IEBAIHZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
biA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5t
b3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAg
ICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBt
X2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5C
dWZmZXIsIGRyYXdpbmdSZWdpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2
YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uZDNlYzk1YWRkZjEzNDdiNTNlZTA0ODdjNDBhZGIxOTAx
YWU0NDdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBm
bG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9h
dCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2b2lk
IHNldER4KGZsb2F0KTsKQEAgLTM3LDEzICszNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
eShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZs
b2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTMsMyArNTAsNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRl
eCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi4zODcwN2IzMDFmZDEx
MGJlY2JiMDRlMjVjZmM5ODJhMjA1ZmU2NDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVNwZWN1
bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0g
ICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBU
eXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYg
bGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5n
Q29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7CiB9CiAKLVJl
ZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJM
aWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25z
dGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5n
dGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
U3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29u
c3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVu
Z3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+
RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29sIEZFU3BlY3VsYXJMaWdodGlu
Zzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewogICAgIGlm
IChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEu
LmFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUzMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaApAQCAtMjcsOCArMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+
JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8
RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJvb2wgc2V0U3BlY3VsYXJD
b25zdGFudChmbG9hdCk7CkBAIC0zOSw4ICszOCw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGln
aHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFl
N2RjYTBjNWRiMmZjYWMyMGFkLi5lNzRhNzhjOWUyMTY5MDFhOTVlYWQxYjU5ZTZlZmE5NWQ5MDQx
YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCkBAIC0zMSwyMiArMzEsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQordm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3Jr
IGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhl
cndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdl
QnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC01OCwxMyArNTgsMTIg
QEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmxvYXRSZWN0IHRp
bGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0
TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwogICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0
TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRl
ckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBpZiAoaW4tPmZpbHRlclR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIHRpbGVSZWN0
ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVp
Z2h0KCkpOworICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAg
ICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7CiAg
ICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3
ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uZWQ3Njk1MWZiNWI0MzFkNTM3MmM0ZDNlZWE1
ODU3NTA1M2ZjZDEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yMiwyNyArMjIsMjMgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3Rh
dGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXIm
KTsKKyAgICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJF
ZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7
IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVU
aWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5YmI2ZTIwNmExZDJiZmFl
YjBjZWE5MTlmMGIuLmQ4MjUzMTYxNzQzYzU2YWFhNTc1ZjUyOTdkZTE3MzFlYzMwNDUzZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGljIGNvbnN0IGludCBzX3Jh
bmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQogc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3RhdGljIGNvbnN0IGludCBz
X3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmls
dGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3Rp
dGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUdXJidWxlbmNlKQor
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9iYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1
ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRl
ciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAK
LVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorUmVm
PEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1
ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5
WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVu
Y2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2NiwyMiArMzY2LDIxIEBAIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVu
dHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKICAgICBJbnRSZWN0IGZp
bHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxl
KGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVy
UmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFy
dFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGlu
dmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52
YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9
IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsr
eSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAgICAgICBwb2ludC5z
ZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRl
clJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgp
ICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBpbnZlcnNlVHJhbnNm
cm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhlaWdodCgp
KTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9m
UGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKQEAg
LTM5MSwxOSArMzkwLDE4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmCiAKIHZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0
YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICBwYXJhbWV0ZXJz
LT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRlcnMtPnBp
eGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERh
dGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQo
KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAog
ICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICBkZXN0aW5hdGlvblBpeGVs
QXJyYXkuemVyb0ZpbGwoKTsKQEAgLTQ0MCw3ICs0MzgsOCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAm
ZmlsdGVyOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZmZlY3QgPSB0aGlzOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAg
ICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CkBAIC00NTcsNyArNDU2LDcg
QEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgfQogCiAg
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJy
YXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1
Y2ZiLi41ZTU1MGQ5ZDZiNDA0YjYwNWZhOTE1NDE5MWMzMDA0MmRkMWJkOWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlw
ZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5j
ZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxG
RVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBz
dGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTk2LDcgKzk1
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwogCiAgICAgc3Ry
dWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7
CisgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVuY2UqIGVm
ZmVjdDsKICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CiAgICAgICAgIFBh
aW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwogICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7
CkBAIC0xMDYsMTkgKzEwNiwxNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJl
Z2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwogCi0gICAgRkVUdXJidWxlbmNlKEZp
bHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwor
ICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZs
b2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0
Y2hUaWxlcyk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hEYXRhIGNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hE
YXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3Jr
ZXIodm9pZCopOwogCkBAIC0xMzIsMyArMTMwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVUdXJi
dWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4u
ZjM1ZDliYTQyZmZiMGNhMmUwYzViOGNlY2YzZDYxZDJjN2EwMTc2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDU4ICsyMiw1NyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0OwogCi1jbGFzcyBGaWx0
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBG
aWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBt
X2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVy
U2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZh
dWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291
cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsg
fQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2Nh
bGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKLSAgICBGbG9hdFNpemUgZmls
dGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAg
IHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRp
b24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQorICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsg
fQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
KSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisgICAgCisgICAgRmxvYXRSZWN0
IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpIHsg
bV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7IH0KIAotICAgIGZsb2F0IGZpbHRl
clNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0Rmls
dGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgdmly
dHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlG
aWx0ZXIoKSB7IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRT
b3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJ
bWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQogCiAgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9
CiAgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkg
eyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIEZsb2F0
U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0
dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwotCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQg
RmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2Zp
bHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlvbikKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBl
IGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpCisgICAgICAgIDogRmls
dGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZpbHRlclNj
YWxlKQorICAgIHsKKyAgICB9CisKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikKKyAgICAgICAgOiBGaWx0ZXJG
dW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUp
CisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAs
IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdl
UmVjdDsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBSZW5kZXJpbmdN
b2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAg
ICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNj
OTI3ZGIxMDguLmUzMzMwYTFmNDY0NTI4ZGE3MzJmZGI2MjhlMjAzMDdmYzFhODRhMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTM1LDI1ICszNCwxNCBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
I2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5
cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlKHR5cGUpCitGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCiB7CiB9CiAKLUZpbHRlckVmZmVj
dDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7CiAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKQEAg
LTk2LDIyICs4NCwyMiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5z
Zm9ybS5tYXBSZWN0KHNyY1JlY3QpOwogfQogCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ewogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQg
ZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgogICAgIEZsb2F0
UmVjdCBzdWJyZWdpb247CiAgICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0g
aW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0
KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICAgICAgc3VicmVn
aW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihm
aWx0ZXIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVm
ZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9
IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAg
ICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CiAgICAgICAgICAgICBz
dWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwogICAgICAgICB9CiAgICAg
fSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNw
YWNlKCk7CisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAg
IC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRo
ZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4K
LSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAg
ICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOworICAg
IGlmIChmaWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCisgICAgICAg
IHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAgIGF1dG8gYm91bmRhcmll
cyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKICAgICBpZiAoaGFzWCgpKQpAQCAtMTI1LDE1ICsxMTMs
MTQgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkKIAogICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwog
Ci0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3Jt
KCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0
ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gc3VicmVnaW9uOwor
ICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICAv
LyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0
aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgogICAgIHNl
dFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8v
IENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBhdXRv
IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0g
ICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Cisg
ICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24o
KTsKKyAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmls
dGVyUmVnaW9uKTsKIAogICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwpA
QCAtMTYzLDE0ICsxNTAsMTQgQEAgdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9m
RWZmZWN0SW5wdXRzKCkgY29uc3QKICAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxs
RWZmZWN0cyk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCit2b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgp
KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAgICAgICAg
aW4tPmFwcGx5KCk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOwogICAgICAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTc4LDQ4MiArMTY1LDEw
NSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgICAgICB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGluLCBpKTsKICAgICB9CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7CiAgICAgc2V0UmVz
dWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIg
PDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIg
PDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24g
IiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJl
Y3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1f
bWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29s
dXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24g
PDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAg
YWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVn
aW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8
ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBz
Y2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChtX2Fic29sdXRlUGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWly
ZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0
aXBsaWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3Rz
KQorICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsK
ICAgICB9Ci0gICAgCisKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCgpKQorICAgICAgICByZXR1cm47
CisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5k
IHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3Vs
dCgpCiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90
aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VB
cnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCog
cGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGgg
PSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMg
cGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxl
bmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4
ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhl
bERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgx
Nng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERh
dGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAg
ICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlM
ZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJy
YXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5n
IGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3
aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5
dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAg
ICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUg
cGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRh
ID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIElu
Y3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQorICAgIG1fZmls
dGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwor
ICAgIHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7
CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogewogICAg
IC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0
IGhhcwogICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4g
ZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1
bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVj
dHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOworICAgIGNsZWFyUmVzdWx0
KCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgZWZm
ZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQogICAgIGlmICghaGFzUmVz
dWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25S
ZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVs
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5h
cmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0g
ICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3Qs
IGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIHJldHVybiBtX2ZpbHRl
ckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnBy
ZW11bHRpcGxpZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBp
ZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0
KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBu
b3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lngo
KSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0
aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5v
dCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8
PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3Qu
eCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAg
IHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQg
eEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAg
IGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBp
ZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9y
aWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAg
aWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2Fs
ZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikg
KiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICog
NDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgo
eURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlF
bmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXpl
KTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAg
ICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQot
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0
aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRp
cmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1h
Z2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9u
UmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRD
b2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgp
LmFscGhhRm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNl
KGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEFscGhhRm9ybWF0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVyQ29u
dmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0
aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3
aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVkQnVmZmVy
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICAKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZl
ci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6
OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3Rp
bmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZl
clRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3Qp
OworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qs
IGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5w
cmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9y
U3BhY2UpIGNvbnN0CiB7Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8g
d2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBj
b252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5k
YXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
KyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rp
bmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8v
IFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAg
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xv
clNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFj
ZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxC
dWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJ
bWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHJlY3QpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKQogewogICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0
ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAg
ICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNl
KCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCht
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0
Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKKyAgICBpZiAoIW1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1f
cmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhG
aWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1
bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUp
OwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBP
bmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkp
OwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1f
YWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNl
IH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3Jl
YXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0
aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3Bh
Y2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9u
IHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFO
RCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9u
Q29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJz
aW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9maWx0ZXJJbWFn
ZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIAogfQogCiB2b2lkIEZp
bHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNF
RF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3Vs
dCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAg
aWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNh
biBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNp
b24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRo
ZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRy
YW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1
bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiBUZXh0U3RyZWFtJiBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRl
eCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi40OTc0MjE4YmUwNjNm
NzI3NGIwM2QxMjliZDNmMDc1NTQ4MTk5MDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTI0LDEzICsy
NCwxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUg
IkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgogI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Niw2NSArNDcs
MzYgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0g
ICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAot
ICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1
dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZm
ZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAg
ICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBD
b21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRp
bmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAg
ICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAg
IExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAg
T2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAg
ICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhp
YwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFy
UmVzdWx0KCk7CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUGl4ZWxCdWZmZXIqIHVucHJlbXVs
dGlwbGllZFJlc3VsdCgpOworICAgIFBpeGVsQnVmZmVyKiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7
CisKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2U7IH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlw
bGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxp
ZWRSZXN1bHRJZk5lZWRlZCgpOworCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5wdXRF
ZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwogICAgIAotICAgIGlubGluZSBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRz
IHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90
IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAg
fHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJl
Y3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25z
dDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CiAKICAgICAvLyBTb2xpZCBi
bGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCiAgICAgYm9vbCBpc0FscGhh
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KQEAgLTExNCwyMCArODYsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYg
YWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRS
ZWN0OyB9CiAKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAK
LQotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7
IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGlu
IHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0
aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZp
bHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQg
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgdm9pZCBhcHBseShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5
cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmly
dHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jik7CiAKICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERl
YnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0
aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CkBAIC0xNTYsMTEgKzExOSw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0
UG9pbnQpIGNvbnN0OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmls
dGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KICAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25z
dCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KICAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMo
Ym9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQogCkBAIC0xODEsNDAgKzEz
OSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOworICAgIEZpbHRlckVmZmVjdChUeXBlKTsKICAgICAKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2
YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2gg
Y29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVz
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYg
YSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFu
ZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGll
ZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0
ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0
aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZm
ZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXIm
KTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpID0gMDsKIAotICAgIEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVm
ZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwog
CiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMjQ4LDExICsxODQs
MTcgQEAgcHJpdmF0ZToKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xv
clNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICNlbmRpZgogICAgIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFz
c1R5cGU7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyVHlwZSgp
ID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAppbmRleCA1
NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5Y2M0Li41OWNmN2RmZTM0MzYxMWZi
MWE2ZjI2NTJmNjYwYjZjMGI4MTkwNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
CkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKICAgICAKIHB1
YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0
cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhj
b25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1Jl
c3VsdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0
JikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjViYjE1NjM4
MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0YWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSBmaWx0ZXJUeXBlKQor
ICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29u
c3QgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNo
TWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVy
RnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9u
OjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmls
dGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAg
ICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgs
ICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
ICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAg
ICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAg
ICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAg
IkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAi
RkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJG
RVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAi
U291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZp
bHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgp
OworfQorCitjb25zdCBBdG9tU3RyaW5nJiBGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBl
IGZpbHRlclR5cGUpCit7CisgICAgYXV0byBpdCA9IGZpbHRlck5hbWVzKCkuZmluZChmaWx0ZXJU
eXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmlsdGVyTmFtZXMoKS5lbmQoKSk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI3YmU5ODRjNGQxNzc1OGY2NzFhYzJmN2RjNTYxMmY5ZTFkMjI4ZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5p
bXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRy
aXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAor
ICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAg
ICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAg
RkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAg
ICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisg
ICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1
cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAor
CisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVy
RnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7
CisKKyAgICBUeXBlIGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGU7IH0K
KworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0g
VHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBtX2ZpbHRl
clR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV9maWx0ZXJU
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGZpbHRlck5hbWUoVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUFs
cGhhTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9CisgICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmls
dGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGZp
bHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7IH0KKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclJlc3VsdCgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9maWx0ZXJUeXBlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpD
U1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0
ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
dXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNl
QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFw
aGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMWNlMTRiODA0OTI4ZDU4Yjg0YjU2ODQyNTdlMmIzZmVkMjIzY2RkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhsb2dpY2FsU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2Uo
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkp
OworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNh
bFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdl
QnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2Nv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6
ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklm
RXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBt
X2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKwor
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJl
bXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgo
KSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNy
Yy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVz
dC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRh
KCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6
ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBv
bmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQg
PCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsz
XSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkK
K3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUu
d2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBp
bnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Cisg
ICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisg
ICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291
cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAo
aW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21w
b25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwor
ICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUg
LyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25l
bnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5k
aWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
cmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVy
ID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9y
U3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0
cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH0pOworICAgICAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBz
Y2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShm
b3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZm
ZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhl
bEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAg
ICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7
CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkp
OworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBj
aGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAg
aWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIs
IGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7
Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkg
Y29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdo
ZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9u
CisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xv
ciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0
ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBt
X2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29s
b3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9Q
QVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1f
bG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBi
bGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2Nh
bGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgo
KSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAw
LCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJl
Y3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVj
dC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgp
ID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBh
aW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBz
Y2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkg
eworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9
CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9
IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Cisg
ICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4
WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICB5
RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAt
IHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qu
d2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5k
YXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAg
Y29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICog
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlP
cmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQ
aXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2Fu
bGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsr
eU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlcklt
YWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAg
Ly8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5k
IHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNv
bnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9u
IGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRv
IGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
YWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJldHVy
biBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30K
Kworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7
CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAg
cmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBD
cmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdl
QnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVy
SW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAg
IGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAm
cGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZl
ciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAg
ICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNhbFNpemUp
IH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRD
b252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29s
b3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBp
eGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZl
ciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMo
Y29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRh
dGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3Jy
ZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24g
cHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlk
IHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlw
bGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VB
cnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0
aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29t
cGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKworI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2
NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJh
eUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVtZW50
cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVs
cyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsw
XSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7
CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhl
bHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4
ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxz
LnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMp
OworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhlbERh
dGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKKyAg
ICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OworCisg
ICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3Rp
bmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhlbHMg
Pj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAorICAg
ICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBlYWNo
IGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgqcGl4
ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAgICAg
ICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEK
KyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdlOjp0cmFu
c2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisj
aWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50
ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChj
b2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVy
IGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBv
cnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5z
Zm9ybUNvbG9yU3BhY2UobV9jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JT
cGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0
ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9w
dDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGNiNWExZjBmMDYzODEzNTNhODFjOTE0ODI4NzI2NzVhOWQyOWZkZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
SW1hZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBp
eGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRl
ckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBGbG9hdFNp
emUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhp
c3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29y
cmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1h
Z2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wg
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVs
QnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBj
b25zdDsKKworICAgIEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmluZ01vZGUg
bV9yZW5kZXJpbmdNb2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IG1faW1hZ2VCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3By
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNh
My4uYTU5NmQ0OGU0ZDU5YjYzNTE5YzI4OTc2MjRlMGE0OGNmYTBmYWQwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKQEAgLTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMiwyMiBAQCBSZWY8U291cmNlQWxw
aGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9CiAKLWNv
bnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpT
b3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRlckVmZmVj
dChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VB
bHBoYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19l
ZmZlY3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZl
Y3QpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Cit2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
ZmlsdGVyKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCit2b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBo
aWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CkBAIC02
OSwxMSArNjcsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0czsKIH0K
IAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQot
ICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291cmNlQWxw
aGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVjdCk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5YTM2N2Zk
NDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi41MmEzOWE0OTI0MTYxMWUwMTE0NDE3YTZh
MDRmNjZmMDljNjEwMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gKLSNk
ZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhh
PiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkg
eyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNvdXJjZUFs
cGhhX2gKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VBbHBoYSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3
ZDc4MzkyZTkuLmQ2NDVhYTkyNTAyZmE3ZmU2NDQ2NjdkYWYzZTA1NWMwOTgzNmMxYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcApAQCAtMjIsMzcgKzIyLDI5IEBACiAKICNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3Jl
YXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKGZpbHRlcikp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoKSk7CiB9CiAKLWNvbnN0
IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQorU291cmNlR3JhcGhpYzo6
U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykK
IHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNfZWZmZWN0TmFtZSgiU291cmNlR3JhcGhpYyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi12b2lkIFNvdXJjZUdyYXBo
aWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgU291cmNlR3JhcGhpYzo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
ZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmls
dGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0
KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0
KSk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3Zv
aWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgK
aW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uNmJjNDdhMWYw
MWI1NTYzNjViOTU3OTVlNmEwNWM1YWViMTYzMTJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4
LDQxICsxOCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4g
Y3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7
CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpz
b3VyY2VHcmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0
ZXImIGZpbHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VH
cmFwaGljKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3Jh
cGhpYyI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGaWx0ZXJFZmZlY3RU
eXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZl
Y3RUeXBlU291cmNlSW5wdXQ7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0gICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJl
dHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
Ci0KLQotI2VuZGlmIC8vIFNvdXJjZUdyYXBoaWNfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19G
SUxURVJfRUZGRUNUKFNvdXJjZUdyYXBoaWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2Eu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMwOWJmMDYzZjQ5OTll
MDNiMjE5ZTg1ZDdlMmQ5Li5kNjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFjNGZjMDcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5j
cHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2Vi
UlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmExN2FjMTdk
YjVjMDJiNWI2MTEuLmRmYmZmOWJmOWYyNTBjZjQxNDc0ZDU3OWRlYWNkZTEyMDM4ZmI4OTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJD
YWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJp
eC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BT
aGFkb3cuaCIKQEAgLTM4LDQ1ICszNSwxODMgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVz
b3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRl
ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMu
aCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWY8Q1NT
RmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOwor
ICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4g
PSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3Jp
Z2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpD
U1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291
cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NG
aWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNo
b3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKQorICAg
IDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2FsZUZhY3Rv
ciwgc2NhbGVGYWN0b3IgfSkKKyAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKGhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4pCisgICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6Y3JlYXRl
KCkpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0YXRpYyBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVy
YXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQoreworICAgIGZs
b2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGRE
ZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2
aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQ
cm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQogCi1HcmFw
aGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAg
IHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxw
dHI7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0
aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsK
K30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41
ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVu
Y3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24p
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVj
dChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7Cisg
ICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2Nh
bGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0g
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRl
cnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwg
V1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmls
dGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZl
cmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24p
OworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwor
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0g
MiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7Cisg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5z
ZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAg
ZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y3JlYXRlKG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0
dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JN
YXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9Owor
ICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1v
dW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4w
KTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRp
b24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAw
LjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0
dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVm
ZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291cmNl
cyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBm
aWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxl
bWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAgaWYgKCFm
aWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVk
IHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZp
bHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0
ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9u
LmZyYWdtZW50KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJl
ZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0
aGlzIGRvZXMgYW55dGhpbmcuCkBAIC04NSwyMzEgKzIyMCwxMjMgQEAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgRmkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byBidWls
ZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAg
IG1fc291cmNlQWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkpOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0byYg
ZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVs
ZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkg
ewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmls
dGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQg
ZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICB9CisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIHJldHVy
biBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyLmZpbHRl
clNjYWxlKCksIGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJlZ2lvbigp
LCBwcmV2aW91c0VmZmVjdCk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVu
ZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVt
ZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0
ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNl
bHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRl
ci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5j
ZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVjdHMuYXBw
ZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBlZmZlY3Q7
CitzdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVjdCYgZWZm
ZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3sKKyAgICAvLyBVbmxpa2UgU1ZHIEZpbHRl
cnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCisg
ICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmlt
aXRpdmUgc3VicmVnaW9ucy4KKyAgICBlZmZlY3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOworICAgIGVmZmVjdC5zZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAogYm9vbCBD
U1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAgICBtX2hh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4oKTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rpb25zLmNs
ZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
cHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRyPFNWR0Zp
bHRlcj4gZmlsdGVyOworCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAg
ICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAo
ZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3du
Y2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZm
ZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChvcGVy
YXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5W
RVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBM
RV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29s
b3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8g
U2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRl
eC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlv
biBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAw
Ljc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAw
LjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAw
LjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVy
cykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAg
ICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91
YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1v
dW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5v
cmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVu
dAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
ODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAu
NTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9y
TWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUo
aW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRy
aXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
KSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBG
RUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3Rv
cjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hh
ZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
dHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3Vu
dDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBM
RV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0
ZXIuCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAg
ICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAg
ICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
TElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9h
dChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwg
dHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2Zl
ckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFt
b3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5j
dGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpD
T05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2Zl
ckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rp
b247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRo
aXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBzdGREZXZp
YXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclBy
b3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRl
cigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwg
cmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRy
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAg
ICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAgIHNldHVw
TGFzdEVmZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHBy
ZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIC8v
IFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25z
IG9uIHRoZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91
bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAgICAgICBl
ZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRl
ckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
KSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShw
cmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZl
Y3QpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGll
cygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygp
ID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92
ZShlZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2Ug
YW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmICht
X2VmZmVjdHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgIG1f
ZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZl
Y3QgY2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisKKyAg
ICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVm
ZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJjZURy
YXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGlmICghbV9maWx0ZXJSZW5k
ZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0
cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJl
bmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIG1fZmlsdGVy
UmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRp
bmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksICpsYXN0RWZm
ZWN0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8g
JnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgQ1NTRmlsdGVy
Ojp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsK
ICAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMzMSw1MyArMzU4LDY4IEBAIHZvaWQgQ1NT
RmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBsb2dpY2FsU2l6ZSA9IG1fc291cmNlRHJhd2luZ1JlZ2lv
bi5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgpLnNpemUo
KTsKICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUo
KSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNl
SW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAm
dGFyZ2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0
LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7
CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJl
bmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRT
b3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYK
KyAgICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAg
Y29udGV4dC0+c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZm
ZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6
bGFzdEVmZmVjdCgpCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25zLmxhc3Qo
KTsKKyAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisgICAgcmV0
dXJuIGRvd25jYXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCiB2b2lkIENT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIHsKLSAgICBhdXRv
JiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBsYXN0RWZmZWN0LmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdp
b24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RF
ZmZlY3QoKTsKKyAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigq
dGhpcyk7CisgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0UmVjdCgp
OwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBz
aXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMu
Ci0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29s
dXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBp
ZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRl
clNjYWxlKSkgeworICAgICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7CisgICAgICAg
IGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKICAgICB9
CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQogewogICAg
IG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VBbHBoYSkK
LSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmNsZWFy
UmVzdWx0KCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCit2b2lkIENTU0ZpbHRlcjo6
YXBwbHlGaWx0ZXIoKQogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0
KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgaWYgKG1fZmlsdGVyUmVu
ZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7
CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cygqdGhpcywgKmVmZmVjdCk7
CiAgICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAg
ICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOworICAgICAgICAgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisKKyAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9uLT5hcHBs
eSgqdGhpcyk7CisKKyAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29t
cHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJC
b3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzQgKzQzMiwzMCBA
QCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVj
dChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWludDsKIH0K
IAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVmZmVyKiBD
U1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0
ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVy
LT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0KQogewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJj
ZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QpOwotICAg
IHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCA9IGZhbHNlOwotfQorICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0ID0gc291
cmNlSW1hZ2VSZWN0OworICAgIHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXJTY2Fs
ZSgpKTsKIAotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVj
dCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAg
ICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworICAgIEZpbHRlcjo6
c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgPSBmYWxzZTsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25z
dAorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGF1dG8mIGxhc3RFZmZl
Y3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVj
dCgpOwogICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJl
bmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJu
IGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBt
X2ZpbHRlclJlZ2lvbiB9KTsKKyAgICBpZiAoZWZmZWN0LT5oYXNSZXN1bHQoKSB8fCAobV9maWx0
ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCisgICAgICAgIHJl
dHVybiBlZmZlY3QtPnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsg
ZmlsdGVyUmVnaW9uKCkgfSk7CiAgICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQzMCw4ICs0
NjgsOSBAQCBJbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAgaWYgKCFt
X291dHNldHMuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+
b3V0c2V0cygpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAg
ICAgbV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4gbV9vdXRz
ZXRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBiOTE5MTdi
ODA0YzkyZDk0MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uZWUzZGQ5ZmRmNjUxZDYzNTkzZmY0ZDky
YzkxYTE2MzM1YWM3ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NT
U0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAt
MzgsNjkgKzM4LDUwIEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CiBjbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVt
ZW50OwotY2xhc3MgU291cmNlQWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCiBlbnVtIGNs
YXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAK
IGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWY8
Q1NTRmlsdGVyPiBjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUs
IGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQotCi0g
ICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2
b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKIAogICAg
IGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCisgICAgYm9vbCBidWlsZChSZW5k
ZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKICAg
ICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwotICAgIHZp
cnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQot
ICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJl
ZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVj
dCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
bGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAg
SW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE1heEVm
ZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7Cisg
ICAgSW50UmVjdCBvdXRwdXRSZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91
dHB1dFJlY3QoKSBjb25zdDsKLQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVj
dEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lv
bjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Citwcml2YXRlOgorICAgIENTU0ZpbHRl
cihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpOworCisgICAg
Ym9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0
U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKLSAgICBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKICAgICBSZWY8U291cmNlR3JhcGhpYz4g
bV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7
CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogCiAgICAgbXV0
YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKIAotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBjMjY2OTYyOTkxNzRiZDZmZDg5YzYyYjFhMDIy
OTZmYTg5ZTRiZDkuLmY3ZTczYjJmNTAxNDhjZDY2YzJiNjlkZWYxYjE0YTUzOTkyZjA0ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIyNiw3ICszMjI2
LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3Vu
ZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRG
cm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBh
aW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVj
dCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVy
cy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNs
b3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVj
dCkpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5k
ZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZmQ0N2Q3Mjk3Y2U3
YWMwZDkxMDAxYjlkZWEzNWZiNGJlZjk3YjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9p
ZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAg
IGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgp
OwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAg
ICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2Ug
aWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1f
ZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5j
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZmlsdGVy
IGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwg
YXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNv
bXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1FOiB0aGlz
IHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5
bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVu
ZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkK
LSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpj
cmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0
b3IpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0
ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTE0NSw2ICsxMzMsMTMgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXll
ckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUg
PSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICBp
ZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0ZXItPmxhc3RFZmZlY3QoKSkgewor
ICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0
aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bworICAgICAgICAvLyBnbyB0aHJvdWdo
IHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBh
bnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRlcmVy
LnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJl
Y3Q7CiAgICAgZWxzZSB7CkBAIC0xNTksOCArMTU0LDYgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAg
IHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5l
ZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4
dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4
dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKQEAgLTE4NCwxNCAr
MTc3LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9m
aWx0ZXI7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAgICBmaWx0
ZXIuYXBwbHkoKTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAogICAgIC8vIEdldCB0aGUg
ZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgogICAgIExheW91dFJlY3QgZGVz
dFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9m
ZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZm
ZXIgPSBmaWx0ZXIub3V0cHV0KCkpCisgICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRl
ci5vdXRwdXQoKSkgeworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoeyAxIC8gZmls
dGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdo
dCgpIH0pOwogICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRw
dXRCdWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVy
ZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgZGVzdGluYXRp
b25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBmaWx0
ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkwYjcwMDNk
N2U3ODQ0YzkxOTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0NGRhMDM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBA
IC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVj
dCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAotICAgIEdy
YXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5h
dGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRl
c3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJSZXBhaW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjU2ZGQxYzIwNWZm
NzY5Njg0YmEwYjcxYzQ0OTBmNWIxYmI0ZWE0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC04Miw0
MCArODIsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9t
Q2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFs
aWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0
aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdG
aWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNW
R0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhD
b3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxk
Tm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdC
b3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWls
ZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUo
ZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgp
LnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRh
cmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJl
bk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1l
bnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0
KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVy
LT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3Qu
Y29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5k
YXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJv
dW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0
aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVu
ZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJl
bmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkg
PT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0g
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRk
KGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBi
dWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNl
TW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xNDMsNDUgKzEwOSwzNiBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBFbGlt
aW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUg
YWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFi
c29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUo
KSwgMCwgMCk7CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNmb3JtLnhT
Y2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKICAgICAvLyBEZXRlcm1pbmUg
YWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24u
CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5n
Qm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0
YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0g
ICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5n
Qm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVz
LgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEt
PmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBz
aXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFu
IGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRl
RHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAg
IHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLQot
ICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEt
PmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAgRmxvYXRSZWN0IGFic29s
dXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb247CisgICAgYWJzb2x1
dGVEcmF3aW5nUmVnaW9uLnNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUp
OwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAx
MDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+
bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENy
ZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNW
R0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZp
bHRlclNjYWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMs
IHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEt
PmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgp
KTsKIAotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OworICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqZmls
dGVyRGF0YS0+ZmlsdGVyKTsKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+
bWF4RWZmZWN0UmVjdCgpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMg
YSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXpl
cyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEt
PmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3Qt
PmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGlmIChJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpKSB7Cisg
ICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpOwor
ICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKmZp
bHRlckRhdGEtPmZpbHRlcik7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24g
aXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KQEAgLTE5
NCw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAgIC8vIENo
YW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJl
ZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9y
bS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0aXZlVHJh
bnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3Jt
KGZpbHRlclNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAwLCAwKTsK
IAogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0
ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKQEAgLTI2OSw3ICsyMjQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhp
YwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3Qg
PSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RFZmZlY3Qg
PSBmaWx0ZXJEYXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCiAgICAgaWYgKGxhc3RFZmZlY3Qg
JiYgIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlzIGlzIHRo
ZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxl
ZCBvbiB0aGUKQEAgLTI4MSwyMSArMjM2LDE2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAg
ICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAoZmlsdGVy
RGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgogICAgICAgICBpZiAoIWxhc3RFZmZl
Y3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVy
RGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwotICAgICAg
ICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgICAg
ICAgICBsYXN0RWZmZWN0LT5hcHBseSgqZmlsdGVyRGF0YS5maWx0ZXIpOwogICAgICAgICAgICAg
bGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7CiAgICAgICAgIH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRl
ckRhdGE6OkJ1aWx0OwogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RF
ZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewot
ICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1
dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7Ci0KLSAg
ICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8g
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5m
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4MDdjNy4u
NjRlM2FjNWFlYWM4MGFkZjllMjZhYjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00
MzIsMTEgKzQzMiwxMyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB0cyA8PCAi
XG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBw
YXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAg
ICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0o
KSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChh
dXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkg
eworICAgICAgICBGbG9hdFNpemUgZHVtbXlTY2FsZSgxLCAxKTsKKyAgICAgICAgU1ZHRmlsdGVy
QnVpbGRlciBidWlsZGVyOworICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpj
cmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSwgYnVpbGRlciwgZHVtbXlTY2FsZSwgZHVtbXlS
ZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7CisgICAgICAgIGlmIChkdW1teUZpbHRlcikgewog
ICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwogCi0g
ICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVm
ZmVjdCgpKQorICAgICAgICAgICAgaWYgKGF1dG8gbGFzdEVmZmVjdCA9IGR1bW15RmlsdGVyLT5s
YXN0RWZmZWN0KCkpCiAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJlc291cmNl
VHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQwNjQz
MWY2ODYuLjA1NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsxMDAsMTYgQEAg
dm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJs
ZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwor
ICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKIAog
ICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsK
LSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5h
cHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAg
IGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICBy
ZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmlu
ZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmViYTlhYmI1ODMy
OGY0ZGFiZjM0MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLmNk
ZWJlZjE4YTFmZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEwMCw5IEBA
IHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAg
ICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRl
clZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAg
IGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUo
ZmlsdGVyVmFsdWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShp
bnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIxMmU3N2Jl
MjA2YjljNWM0MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBkYmRkNjk1MjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaApAQCAt
ODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggOTBhNTVi
N2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgzZWJmMWVhYzBh
ZGFiMTExMmZlZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBm
aWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAg
ICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFu
c2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1
cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZlOGI5OTNh
NGRkNTQ4NjMuLjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5ODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
CkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNo
YW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUu
LjdmY2VkMmU2NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkgKzEzMSwxNiBA
QCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZp
bHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAg
IGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisgICAgYXV0
byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCks
IGszKCksIGs0KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5w
dXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2NTdhMGZh
MzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2YThiNTNhZmY1
NjlkOGQxMWRjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1
MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTljOGI3ZmMwYTUw
NzVlZGU4MWEwZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9pZCBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTI0Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICAg
ICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29udm9s
dmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVl
KSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZh
bHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJu
ZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVl
KSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZh
bHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJu
ZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMz
OS4uMWI2YmJlNDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4YTEzNDE1MWRh
MzY3ZjRjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGln
aHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXIKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZp
bHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0
U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsxNzAsOCBAQCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHls
ZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0
aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Cisg
ICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNl
U2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVu
aXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5k
ZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJhYWM4YjAzZWQy
NGQyMWQ5OGI1MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZkNzIyZGZk
MDUxNzNkOGMyLi42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWExYTJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cApAQCAtMTE1LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmls
dGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAg
IGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxT
ZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1
dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1dG8gZWZm
ZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFu
bmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
V1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZmZWN0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uZjJjNmQw
YjE4Zjg1Yzk0ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRi
MzI2YTg5YmZjNWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5OWNmNjIxNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTExLDEyICsx
MTEsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xvciA9IHJlbmRl
cmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29s
b3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3Qg
PSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0
aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNy
ZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3Is
IG9wYWNpdHkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQx
KSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEyYjYyMWI4Y2Jl
NDJmNzQ1MWQuLjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4ZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAtNTMsNyArNTMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVu
dC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4uZjMy
OGNjN2MxNWVlNzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU1ZHRkVGbG9v
ZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwg
Y29uc3QgUXVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2OSw3IEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAg
IGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBG
RUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJuIEZFRmxv
b2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Rmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZl
ZTkxMS4uYWVkNjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdhOTk4MjI0
YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNkY2E3NzVjOWI3
ZWZhNWRiOWRjODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIs
IEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25z
dAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChz
dGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZp
bHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwg
ZWRnZU1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1
dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDllMjE0ZmU5NGFl
NDEwMDFjZTQ4ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNkYmE1NDljYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKQEAg
LTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2My
N2VjNGYuLjQyYTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQsMTYgQEAg
dm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYg
KG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2Uo
ZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElt
YWdlKG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFy
Z2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAgICAgaWYgKGlz
RGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50LmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UodHJlZVNj
b3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdGRUlt
YWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4m
IHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5
M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYwZWJmYzI3ZDAx
MzliMmMzNzY4NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5k
ZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMwZDU4MmQwMTNi
ODdjZjBlM2MxMTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
ZXJnZUVsZW1lbnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVtZW50
PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVmZmVjdCA9IEZF
TWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlucHV0czsKKyAg
ICAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VO
b2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVy
Z2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsK
ICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOwpAQCAtNjIs
NiArNjEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJnZUlucHV0cy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBlZmZlY3QgPSBG
RU1lcmdlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0gV1RGTW92ZSht
ZXJnZUlucHV0cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNj
ZjRlM2MyLi40MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47
CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uOGIw
NTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsxMTQsMTkgQEAg
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxv
YXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZsb2F0IHlS
YWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5
OjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKLSAgICBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZF
TW9ycGhvbG9neTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2NjkuLmIyMWI2
ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApp
bmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45YjBkNzAyYTFk
MjU4NTQyMDhiOTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZHRkVPZmZzZXRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlu
cHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zm
c2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFT2Zm
c2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5
YmVlLi44OTk2ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQy
OWE1OS4uNTYzYjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApA
QCAtMTYwLDkgKzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGln
aHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTE3MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAgIGlmICgh
bGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBhdXRvIGxp
Z2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7Cisg
ICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyQnVp
bGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRl
KGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1
bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwg
V1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0
aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNw
ZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlh
MWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1MjE2MjExNjUx
MGQwMDliYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2
NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZkNzI0NjdhYzIw
ZjRmZmY3ZDRkYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBA
IC03MCwxNSArNzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFVGls
ZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1
dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMzYTkxZi4u
Y2FiYWNlNmJkMDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5kZXgg
MTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdiOWU4ZTA4YTQz
ZTdjY2NiNjgwOWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5
WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJl
cXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNo
VGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBGRVR1cmJ1bGVu
Y2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51
bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRD
SCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
CmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLjUwYWY5MTBl
YjU4ZTJjOTIyNDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WCB7IFNW
R0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBj
OThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li4zOGQ0OTg2MDkzMzgyMTg3
YmFkMjI0ZDI5N2Q0MjVjOTFkZTUzOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zOCw3ICsz
OCw3IEBAIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1Ymxp
YyBTVkdFbGVtZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmlidXRlcyhG
aWx0ZXJFZmZlY3QqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7
CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkw
ODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjIxOTJlODE1YjJjYjYyNzU3NzgyNzcw
ZjViMjEzNGM4YjZkZWM0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zNSw0MCArMzUsNDMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1h
Z2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKK0ZFSW1h
Z2U6OkZFSW1hZ2UoUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3By
ZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotRkVJbWFnZTo6
RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmlu
ZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCitGRUltYWdl
OjpGRUltYWdlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6
IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBtX3RyZWVT
Y29wZSgmdHJlZVNjb3BlKQogICAgICwgbV9ocmVmKGhyZWYpCiAgICAgLCBtX3ByZXNlcnZlQXNw
ZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQor
UmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShpbWFn
ZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUs
IGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklS
ZWZlcmVuY2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3Qg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHBy
ZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKHRy
ZWVTY29wZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi12b2lkIEZFSW1hZ2U6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmxvYXRSZWN0IHBh
aW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpOworICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Q7CiAgICAgaWYgKG1faW1hZ2UpIHsKICAgICAgICAg
c3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlm
IChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAg
ICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVy
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICB9IGVsc2UgaWYgKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpIHsKKyAgICAgICAgc3Jj
UmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgICAg
ICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBpZiAo
Y2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJl
Y3QoKSk7CkBAIC04Nyw3ICs5MCw3IEBAIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5j
ZWRSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigp
OwogfQogCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFSW1h
Z2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwogICAgIGlmICgh
bV9pbWFnZSAmJiAhcmVuZGVyZXIpCkBAIC05NiwxNiArOTksMTggQEAgdm9pZCBGRUltYWdlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlz
IGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCiAgICAgc2V0UmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBk
ZXN0UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOwotICAgIGVsc2UgeworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzcmNS
ZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgICAg
IHNyY1JlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0gZWxzZSB7CiAgICAg
ICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwog
ICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3Jj
UmVjdCk7CiAgICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAg
ICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0
LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgICAgICBSZWZQdHIgY29udGV4dE5v
ZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAg
aWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdj
MGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmM0MjEzY2FmNzJjZjY0OWExZWMxZjJkN2Ey
MWU0ZmFiZWQyNDM3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmgKQEAgLTM0LDIyICszNCwxOCBAQCBjbGFzcyBUcmVlU2NvcGU7CiAK
IGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1h
Z2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVm
PEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3Rh
dGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVh
dGVXaXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfkZFSW1h
Z2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRy
ZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSYpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUltYWdlIjsgfQotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAgRkVJbWFn
ZShSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAg
ICBGRUltYWdlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVy
KCkgY29uc3Q7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFsOwotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwpAQCAt
NjEsMyArNTcsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRh
NDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjgzZjM0MWFkMzQ1N2NkNGExMWEz
MGQ1MmNiYzkyNzFkZjAyYTkzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsMjkgKzIyLDgxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdGaWx0ZXJF
bGVtZW50LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRy
YW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291
cmNlRHJhd2luZ1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNW
R0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIs
IGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgZmlsdGVyUmVnaW9u
LCAmcHJldmlvdXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNy
ZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVt
ZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24s
IHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZH
RmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3Vz
RWZmZWN0KQoreworICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxl
bWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpF
Q1RCT1VORElOR0JPWDsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0
ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3Vu
ZGluZ0JveCwgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXByZXZpb3Vz
RWZmZWN0KQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZl
Y3RzKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRCb3VuZGlu
Z0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVVbml0cyhm
aWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZmZWN0ID0g
YnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0
RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKKyAgICBpZiAobGFzdEVmZmVj
dC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RG
TW92ZShsYXN0RWZmZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpT
VkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAgIDogRmls
dGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0
LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5n
Qm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9lZmZlY3RC
Qm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0g
YWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9hdFNpemUg
U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0
CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXpl
KSBjb25zdAogewogICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQogICAgICAgICBzaXplID0gc2l6
ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOwogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXpl
KCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlG
aWx0ZXJTY2FsZShzaXplKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkg
fSk7CisgICAgYXBwbHlGaWx0ZXIoKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5RmlsdGVy
KCkKK3sKKyAgICBtX2xhc3RFZmZlY3QtPmFwcGx5KCp0aGlzKTsKK30KKworSW50T3V0c2V0cyBT
VkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZlY3QtPm91
dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQordm9p
ZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
dGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBt
X2xhc3RFZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLmZl
ODIyZDgxZjljY2E0NjExMGE4N2UyYjA0ODhmMzZlMGFlMGJlODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw0MSArMjAsNDYg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFz
cyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmls
dGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNw
YWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxl
bWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQdHI8
U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZH
RmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBzY2FsZWRC
eUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhcHBseShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAK
LSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9h
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRp
bmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29s
IGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2
b2lkIHNldExhc3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1f
bGFzdEVmZmVjdCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdG
aWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxv
YXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVj
dEJCb3hNb2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsK
LSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9m
aWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJu
IGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdG
aWx0ZXIoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApp
bmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hODZjMGE5Y2M5
OWNjY2MzNTg1M2QzY2QyNDkwMjc4NDZmYmFhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAs
MjAgKzIwLDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVp
bGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGlj
KQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJF
ZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNl
R3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZl
Y3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpz
b3VyY2VHcmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3Rz
LmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJj
ZUdyYXBoaWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERF
U1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xh
dGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7
CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJl
dHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20g
dGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4
dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xh
dGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5k
aWYKKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxl
bWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisKKyAgICBm
b3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGVmZmVjdCA9
IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAg
ICAgICAgICAgY2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVm
ZmVjdC5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5n
dGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRp
bmdCb3gpKTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVu
dCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3Qt
PnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVm
ZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZmZWN0RWxlbWVudC5y
ZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZWZmZWN0OworfQorCiB2b2lk
IFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApp
bmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li5iN2I4MjRiNDg0
MzIzMjU3N2QyMTMwZDg0NmFhYzhiN2YwOWRlOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0zNyw3ICsz
Nyw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFz
aFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0ZXJCdWls
ZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0ZpbHRlckJ1
aWxkZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0
IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVj
dCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7
IH0KQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7CiAg
ICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAgICB2b2lk
IHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1l
bnQmKTsKKwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGY2MmQ0ZWYyNDZiZDczOGE4MjVmZmEwZjdjZDZhNzkxYTJkOTQ2NDYuLjIy
OTEyMGM5YWYxY2ExMjMzOTA4ZTNiY2E2OTA2MGI5N2U0MmVhODEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MiBAQAorMjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1
ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisK
KzIwMjEtMTEtMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJvbSBGaWx0
ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMjU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCB0d28gZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVzdEV4cGVj
dGF0aW9ucy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAtMzEgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlv
bnM6CisKIDIwMjEtMTEtMDEgIE1pY2hhZWwgU21pdGggIDxtaWtlQHczLm9yZz4KIAogICAgICAg
ICBbV2ViSW5zcGVjdG9yXVtDT1JTXSBTaG93IEhUVFAgc3RhdHVzIGNvZGUgaW4gQ09SUyBtZXNz
YWdlcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGU5MWY0MWU4ODJkNTZlYzE5YzZlNWYyMjJlOWY3
ZjUzZTQ2YmI4MWUuLmZhYmRjZWZkMDA4MTA2OWYxMzUzNjdkOTEyNDY4NzI3ZDlmYmQ4YzIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucwpAQCAtNTE4NiwzICs1MTg2LDE4IEBAIHNlY3VyaXR5L2NvbnRlbnRT
ZWN1cml0eVBvbGljeS9wbHVnaW5zLXR5cGVzLWJsb2Nrcy1xdWlja3RpbWUtcGx1Z2luLXJlcGxh
Y2VtZW50CiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1Z2lucy10eXBlcy1ibG9j
a3MteW91dHViZS1wbHVnaW4tcmVwbGFjZW1lbnQtd2l0aG91dC1taW1lLXR5cGUuaHRtbCBbIFNr
aXAgXQogc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMtYmxvY2tz
LXlvdXR1YmUtcGx1Z2luLXJlcGxhY2VtZW50Lmh0bWwgWyBTa2lwIF0KIHVzZXJzY3JpcHRzL3Vz
ZXItc2NyaXB0LXBsdWdpbi1kb2N1bWVudC5odG1sIFsgU2tpcCBdCisKKyMgVGhlc2UgZmFpbHVy
ZXMgc2hvdWxkIGJlIGZpeGVkIG9uY2Ugd2Via2l0Lm9yZy9iLzIzMTI1MyBpcyByZXNvbHZlZAor
d2Via2l0Lm9yZy9iLzIzMTI1MyBjb21wb3NpdGluZy9maWx0ZXJzL3N3LW5lc3RlZC1zaGFkb3ct
b3ZlcmxhcHMtaHctbmVzdGVkLXNoYWRvdy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBzLWh3LWxheWVyLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgY29tcG9zaXRpbmcvZmlsdGVycy9z
dy1zaGFkb3ctb3ZlcmxhcHMtaHctc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzEyNTMgY3NzMy9maWx0ZXJzL2ZpbHRlcnMtb24tc3ZnLXJvb3QuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBjc3MzL2ZpbHRlcnMvc3ZnLWJsdXItZmls
dGVyLWNsaXBwZWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1
MyBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYmx1ci5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGZhc3QvZ3JhZGllbnRzL2NvbmljLWdyYWRpZW50
LWV4dGVuZGVkLXN0b3BzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZHluYW1pYy1maWx0ZXItY29udGVudHMtMDFhLnN2
ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBpbXBvcnRlZC9tb3pp
bGxhL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRlLTIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjMxMjUzIGltcG9ydGVkL21vemlsbGEvc3ZnL2ZpbHRlcnMvZmVTcGVjdWxh
ckxpZ2h0aW5nLTEuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUz
IHN2Zy9maWx0ZXJzL2ZlTGlnaHRpbmctY2xpcHBlZC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzEyNTMgc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1m
aWx0ZXIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIHN2Zy9m
aWx0ZXJzL2ZlSW1hZ2UtY29sb3ItZmlkZWxpdHkuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>
<flag name="commit-queue"
          id="467720"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443072</attachid>
            <date>2021-11-02 02:00:21 -0700</date>
            <delta_ts>2021-11-02 02:41:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211102020020.patch</filename>
            <type>text/plain</type>
            <size>312292</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uYzAxZjBlMWU3ZGJmZjE5NzI3Zjc5OTU5MjA0N2Jk
ZjRmNmE2ZTQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyMSBAQAorMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5n
IHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMg
aW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQnLiBUaGlzIHdpbGwKKyAg
ICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2ls
bCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3Ns
eSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9uLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0
ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxs
aW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNy
ZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9y
IGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBj
cmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICByZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcHBvc2l0ZSAKKyAgICAg
ICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkuIENvcnJlY3RpbmcgdGhl
IHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJp
bmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZm
ZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERl
bGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3Zl
ZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNS
ZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVyRWZmZWN0LCB3ZSBhcmUK
KyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIHRvIHRoZSBG
aWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBuZWVkZWQuCisKKyAgICAg
ICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVu
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1h
Z2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNl
cGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6bGFzdEVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAg
ICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVp
bGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
Lmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmls
dGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQgYXMg
YW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24g
aW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFz
c29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIg
d2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0
ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhl
IHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgor
ICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNp
bmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhl
IFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRv
IGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlv
biBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEg
cG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5k
IENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRl
ciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZp
bmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0
IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVt
ZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhl
IHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhD
bGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2lu
ZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRo
aXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBk
aXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVm
ZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVG
YWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNp
emUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAg
ICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNr
ZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29v
cmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAg
ICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQg
Im1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpm
aWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJT
Y2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisK
KzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhl
IGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBo
b2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhp
cyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0Cisg
ICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24g
aW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rp
b24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVy
RWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJl
cGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAg
ICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNW
R0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
ZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6
OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9s
bXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdyZW9yZGVyLWN0b3IgaW4g
Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3ZGMzYmQyY2VkMTE4NGMy
ZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4MTFjOGNiY2M5YjE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzU1
YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLjA0OGVhYjAxNjM5Y2M1ZWE5Mjc2
Y2M0YzI4YjBjMTJlOWY1YmVhY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3IEBACiAJCTcyNEVEMzMy
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyog
SlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyog
QWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgw
RDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8q
IEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLzsgfTsKIAkJ
NzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyog
TmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmls
dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1By
b3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0
b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0MjI0MUJG
QjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZl
UHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFu
aW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU3MSw2ICsxMDU3NCw4
IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0
RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0
MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZE
IC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMkIy
NzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDEx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
N0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
NjQ0LDExICsxODY0OSwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdl
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1OUI1OTc3
MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAogCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4
MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
LywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgKi8s
CiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywKKwkJ
CQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJC
ODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgy
MDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdD
Mzk4MyAvKiBydW50aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0yNTI5MSw2ICsyNTI5NiwxMCBAQAog
CQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKIAkJCQky
Qzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAog
CQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICov
LAorCQkJCTcyNjJENzU3MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8s
CisJCQkJNzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJ
CQkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3
MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2
MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2
NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUx
NDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApAQCAtMzI3ODMsNiAr
MzI3OTIsNyBAQAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRBM0EyNEJFMThCNzAwOURF
RTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MjZCRTAyRDI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmlu
ZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwCmluZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3
NzAuLmUwN2Y1NGEzNmQzMmEyMzNiMzA3NjZjNGQ3NjYyMmU2OGVjZjA0OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiwyMCArMTE2LDIyIEBA
IFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJ
bWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVy
biAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3Qg
eyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwg
aW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwg
c2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291
cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUo
KTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAg
IGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVy
LT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0Zp
bHRlcjo6Y3JlYXRlKG1fZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgCisg
ICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBp
ZiAoIWNzc0ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVy
Q29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbElt
YWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3Vy
Y2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSk7CisgICAgY3NzRmlsdGVyLT5hcHBseUZpbHRl
cigpOwogCiAgICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKICAgICBpZiAo
IW91dHB1dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmgKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0NGFmNy4uZTdiYzg1
MzI3MmFiNGRhZjdjOWI4NTAxODZjYzk5YTk3NDRmOTM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3Mg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVy
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8
Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0
ZXJFZmZlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBG
aWx0ZXJFZmZlY3QmKSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Qg
ZmluYWw7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0
IGZpbmFsOwpAQCAtNTUsMTIgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZSgpOwogICAgIAogcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4g
Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4g
Y29ubmVjdENJRmlsdGVycyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKTsKICAgICB2b2lk
IHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGlj
IGJvb2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7
CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0
ZXImKTsKICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0
IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAg
IFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVD
b21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXgg
OTdlMTEzN2IyOWQ3MWMyYjU0NDE1NzMwNjcyNDAwYjgyNDI4YjM2MS4uOGI0MDAxNzcwMGUxMGM2
ODdiYTcwNmU1NTk2YjhjMGIyMzBiYTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAtNzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29s
IGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVu
dFRyYW5zZmVyJiBlCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhN
RTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQK
LSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRj
aCAoZWZmZWN0LmZpbHRlclR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OiB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVD
b2xvck1hdHJpeD4oZWZmZWN0KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKQEAgLTg4LDkwICs4OCw1NiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRy
YW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OgogICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
KGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21w
b3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0
aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VB
bHBoYToKKyAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBw
bHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVy
RWZmZWN0JiBsYXN0RWZmZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKGxhc3RFZmZlY3QpOworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZp
bHRlciwgbGFzdEVmZmVjdCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdlKQogICAgICAgICByZXR1
cm47CiAgICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKIH0KIAotUmV0YWluUHRy
PENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJz
KEZpbHRlckVmZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBp
bnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3Rz
KCkpIHsKLSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwor
ICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgKmluKTsK
ICAgICAgICAgaWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAgZWZmZWN0
LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgZWZmZWN0LmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGZpbHRlcik7CiAgICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZm
ZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
ZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCi0gICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsK
KyAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3Jh
cGhpYyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdy
YXBoaWMoZmlsdGVyKTsKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJp
eDoKICAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9y
TWF0cml4PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNv
bXBvbmVudFRyYW5zZmVyOgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5z
ZmVyKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsK
IAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBz
byB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29t
cG9zaXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdo
dGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok9mZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
QWxwaGE6CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZl
Y3QpCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Omlt
YWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAo
IXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTI3Niw3ICsy
NDIsNyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1
dCgpIGNvbnN0CiB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0lt
YWdlQnVmZmVyKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKIHsKICAgICBGbG9hdFNpemUgY2xh
bXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUlt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVy
U2NhbGUoKSwgbGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JB
OCk7CisgICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIDEsIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewogICAgICAgICBj
bGVhclJlc3VsdCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgsNyArMjU0LDYgQEAgdm9pZCBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJF
ZmZlY3QmIGxhc3RFZmZlY3QKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAogewogICAg
IEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIGRlc3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNp
emUpOwogICAgIHJldHVybiBkZXN0UmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
aW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uMzY3NzJiMGYz
ZWE5NGU4NWU2NDJjNGJhMGY2OWQwNzI3NzQwMDQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKQEAgLTEwNywxMiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBs
aWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDVhYzdmNDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFk
Y2RiNjYuLjU2NDRmZWE3YmY3N2I2NGZlZmY3ODUzNTA1MzQ1MTI3ZTRhNGNhYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cApAQCAtMzQsMTUgKzM0LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6
RkVCbGVuZChGaWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpCbGVuZCkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUp
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwg
bV9tb2RlKG1vZGUpCiB7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShC
bGVuZE1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRl
ciwgbW9kZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQog
CiBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDEyICs1
NCwxMiBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAog
I2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4Zjlj
MDg1MTdiNTA3OWU3OTY2Li5lZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaApAQCAtMjMsMjIgKzIzLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShG
aWx0ZXImLCBCbGVuZE1vZGUpOworICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5k
TW9kZSk7CiAKICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAgICAgYm9vbCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9
CisgICAgRkVCbGVuZChCbGVuZE1vZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNo
YXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWdu
ZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNvbG9yQXJyYXlMZW5ndGgpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWdu
ZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1
bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApAQCAtNDYsMTAgKzQ1LDkgQEAgcHJpdmF0ZToK
IAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVu
ZChGaWx0ZXImLCBCbGVuZE1vZGUpOwotCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFQmxlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0
N2E0MjEwYzI4NTQzMzJiYTFkM2U1Li5iNjY0ZjI5ZTY0OTFhODlmZjM3NzkyMWUyYzJmYTk2YTI3
ODEyNTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTM1LDE2ICszNSwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCitGRUNvbG9yTWF0cml4
OjpGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFs
dWVzKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJp
eCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQog
ewogfQogCi1SZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKK1Jl
ZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5
cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVDb2xvck1hdHJpeChmaWx0ZXIsIHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9
CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAg
LTI3MywxMSArMjczLDExIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4
ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCi12
b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcw
M2FjNGRiNTUyNGVmYTRjMTIzZi4uMjI5ZmYwYjhjNDRmNTFjMGVmMDU0ZTVlYTJhNDI0NmUyMjdk
ODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcg
QEAgZW51bSBDb2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBj
cmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0
YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKIAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC01MCwxMSArNDgs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0ZToKLSAg
ICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYm
KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVDb2xvck1hdHJpeCI7IH0KKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVj
dG9yPGZsb2F0PiYmKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMs
NyArODksNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJp
eCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9y
TWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1Zjli
MDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uODhlNTlmNTA4OTRlN2Q0ZjA3ZmFiMTlmNGU0
M2Y4NmMzN2YzYzkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitG
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTAgKzQyLDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNm
ZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVm
PEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGFscGhhRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRU
cmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24s
IGFscGhhRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRy
YW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVu
Y3Rpb24pKTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAt
MTA0LDExICsxMDMsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEyMSw3ICsxMjAsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwg
Ymx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlVbnByZW11bHRp
cGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGgg
PSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdWludDhfdCogZGF0YSA9IGRl
c3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNl
dCA9IDA7IHBpeGVsT2Zmc2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2Zi
NDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEuLjZhZmVlNWU5Njg2MTcxMzc0MWUzOTlhNjhi
NTFmMzk0MDgzZjA0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC0yMiw4ICsy
Miw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01Myw4ICs1MSw3IEBAIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRl
ciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBz
dGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBn
cmVlbkZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwogCiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rp
b247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDEwICs1OSw3IEBAIHB1YmxpYzoK
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2FscGhhRnVuY3Rpb247IH0KIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvbmVudFRyYW5z
ZmVyKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwotCi0gICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2Zl
ciI7IH0KKyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVu
YywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICB1c2luZyBMb29rdXBUYWJs
ZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKIApAQCAtNzcsNyArNzEsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwg
TG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRh
YmxlJiBhbHBoYVRhYmxlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3Zl
cnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAt
ODksNiArODMsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25l
bnRUcmFuc2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggODMzNTMwOTA4MWEyNmJhMmMzMWMzYmRh
Yzg4ODY2OWUyOGUzNDU2ZC4uMmI4NzkyNDBlMWNiODZlMGI4ODhlMTNiODYzNjM2Y2VmMzBiZmZj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQor
RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVy
RWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb3NpdGUpCiAgICAgLCBtX3R5cGUodHlw
ZSkKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQpAQCAtNDIsOSArNDIsOSBAQCBGRUNv
bXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJh
dGlvblR5cGUmIHR5cGUsIGZsbwogewogfQogCi1SZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRl
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorUmVmPEZFQ29tcG9z
aXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZSh0eXBlLCBrMSwgazIsIGsz
LCBrNCkpOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSB0eXBlKQpAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0
SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIg
Y2xhbXBCeXRlKGludCBjKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CkBAIC0yMDEsNyArMTkzLDcgQEAgaW5s
aW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CkBAIC0yMTgsMjUgKzIxMCwy
NSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAg
ICAgIHJldHVybjsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBi
b3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChmaWx0ZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7
CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsK
LSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBw
cmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgICAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4
ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4t
PmdldFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKQEAgLTI0Nyw3ICsyMzksNyBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3MTA3YjRi
OTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLjE0MzU4ZGMzY2Y2YzFmZDljZWNhYzcyZWQ5NTI5
MThhNmU1ODJkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDEsNyArMzksNyBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFzcyBGRUNv
bXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb3Np
dGU+IGNyZWF0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQpOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRpb25UeXBlKTsKQEAgLTU4LDE4ICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQo
KSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3Rl
Y3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0K
LQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAg
ICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQpOwogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKKyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CkBAIC05MCwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFQ29tcG9zaXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5
OGQ3MDkzNWE5NWM2ZjE1NmVjMjkzM2MwZTk5ZjA1MC4uNjgxNzQ0ZWE0MjQwZTkxNDVkY2M5YzU4
YjI2NTc2ZjkxZGM4NWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zMiwxMCAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29u
dm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0g
ICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNl
dCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVu
aXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVs
TWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgp
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZl
TWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3Io
ZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTEgKzQ3LDkgQEAgRkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAK
LVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorUmVmPEZFQ29udm9s
dmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxT
aXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRM
ZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0
cml4KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVy
LCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJu
ZWxVbml0TGVuZ3RoLAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgo
a2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVs
VW5pdExlbmd0aCwKICAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAK
QEAgLTM2NywxMSArMzYzLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFz
dFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0K
IAotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsK
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IHVucHJlbXVsdGlw
bGllZFJlc3VsdCgpIDogcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODEsMTUgKzM3NywxNCBAQCB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2Vy
dmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1
bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNv
dXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNl
UGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdl
dFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBh
aW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQorICAgIAogICAgIFBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAogICAg
ICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3
ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjk1NzZkZmVlN2U4NDJjYWY0
NjUwODVhZDcxYmM3MGUyZjVhYWY1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0yNCw3
ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1vZGVUeXBlIHsK
IAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29u
c3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50
JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6
ZSYpOwpAQCAtNzcsMTQgKzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxmbG9hdD4g
a2VybmVsTWF0cml4OwogICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNv
bnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYs
IEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0
cml4IjsgfQorICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTExNSwz
ICsxMDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1
NWI5ZDA5Li5mNzZjZTJjZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhhNDA3ZDEzNDFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVM
aWdodGluZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNj
YWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK0ZF
RGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewogfQogCi1SZWY8RkVEaWZmdXNlTGln
aHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhmaWx0
ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRp
bmc6On5GRURpZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBGRURpZmZ1c2VMaWdo
dGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKICAgICBp
ZiAobV9kaWZmdXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjhh
MTBhZWM4N2M4ZjE4OWY5ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKQEAgLTI5LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7CiAKIGNsYXNzIEZF
RGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1
YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KICAgICBib29s
IHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CkBAIC0zOCw4ICszNyw5IEBAIHB1YmxpYzoKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBG
RURpZmZ1c2VMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjli
YTBhN2MzMmIxNmM1NjNmYTEuLjY1NjYzZDkyOTY3ZWE2ZjdmMGJhY2MzNWMxN2UzZmMwMTAzNWFi
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0zMSwxOCArMzEsMTcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rvciwg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkKK0ZFRGlzcGxhY2Vt
ZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1h
cCkKICAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV95
Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3NjYWxlKHNjYWxlKQog
ewogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAg
ICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorUmVm
PEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3Bs
YWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNj
YWxlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5u
ZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAogYm9vbCBGRURpc3Bs
YWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IpCkBAIC05MSw3ICs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93
Qnl0CiAgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwpAQCAtOTksMjkgKzk4LDI3IEBAIHZvaWQgRkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJUKG1feENo
YW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVs
U2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3Qp
OwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2Fs
Y3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZv
cm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNw
bGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVj
dCk7CisgICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+Z2V0VW5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCiAgICAgaWYgKCFpbnB1dEltYWdlIHx8
ICFkaXNwbGFjZW1lbnRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGlucHV0
SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CiAKLSAgICBG
aWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0g
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2Fs
ZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAg
ICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9h
dCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uNmVl
NjhiMTA4ZGI3M2IwNzA0ZmZlZDljNTEwYjQyM2ExYzc1YWRlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1l
bnRNYXAuaApAQCAtMjIsNyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNyBAQCBlbnVtIENo
YW5uZWxTZWxlY3RvclR5cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+
IGNyZWF0ZShGaWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENo
YW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIHN0
YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQgc2NhbGUpOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAgYm9vbCBzZXRYQ2hhbm5l
bFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAtNTIsMTMgKzUxLDExIEBA
IHB1YmxpYzoKICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0
KiwgY29uc3QgaW50KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1h
cChGaWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50
TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQor
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAg
aW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAx
OyB9CiAgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2Vs
ZWN0b3IgLSAxOyB9CkBAIC03MiwzICs2OSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlzcGxh
Y2VtZW50TWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgwOTIxNmU0YjIyNDM1
MTE4NjIzZTI4ZmZkNjFlZmEuLjZhOTZjYTk5MDkxYWFhY2MzYjNkMGJlMmFlZTk1MjM0OWFiMmI2
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIs
IGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6RHJvcFNoYWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0
IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0
ZFkoc3RkWSkKICAgICAsIG1fZHgoZHgpCkBAIC00MiwxOCArNDIsMTYgQEAgRkVEcm9wU2hhZG93
OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZs
b2F0IGR4LCBmbG8KIHsKIH0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVm
PEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNo
YWRvd09wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZp
bHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHks
IHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93Ojpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCit2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVj
dCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZsb2F0UmVjdCBh
YnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVP
ZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9k
eCwgbV9keSB9KSk7CisgICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGFic29sdXRlUGFpbnRSZWN0
LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKIAogICAgIEludFNpemUga2VybmVsU2l6
ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKQEAgLTcwLDE5ICs2OCwxNiBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6
ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7CisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBGbG9hdFNpemUg
b2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOwogCiAg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhP
ZmZzZXQoZHJhd2luZ1JlZ2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3
N2JmM2UwNTczNGVlODhhMjllZmYzODRjLi4xNzcwNTZiYmNmODgzZTY0YmQxNGUxYzRmODViNzRk
ZjY3M2ZjNDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURy
b3BTaGFkb3cgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEZFRHJvcFNoYWRvdz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3Jl
YXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERl
dmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlh
dGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxMyArNDcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7
IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAgICBGRURy
b3BTaGFkb3coRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9h
dCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3Bh
Y2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRHJvcFNoYWRvdyI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC03MCwzICs2Nyw0IEBAIHByaXZhdGU6CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAppbmRleCBiNDIzNTUzNGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi5jNTcwZDlj
NTVlZjY1MzE2NDgwZDVjZTg5YmE3MjU0MjdlYjY3YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMwLDE2ICsz
MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkKK0ZFRmxvb2Q6OkZFRmxvb2Qo
Y29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBtX2Zsb29kQ29sb3Io
Zmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpj
cmVhdGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RP
cGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBm
bG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNp
dHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxv
b2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4
ZS4uYTIwNzgxOTJlNjY4NjVkNzI4ZDRhZTQ3MzM0YWIxNDhjYjE0ZDg4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIy
LDE0ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RD
b2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9y
KGNvbnN0IENvbG9yJik7CkBAIC00NSwxMyArNDQsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgRkVGbG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBG
RUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29k
IjsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTYxLDMgKzU4
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5k
ZXggMGY2ZWU4N2Y5NWU3NTc1MTg2M2ZkMmU1ZjU0OWU3NGQ5NzI5ZGIxZi4uMTM2ZjY4YWFmNzdk
OGIyNTAzYmJkZjZmNGQ4ZThiNTg4YjExNzExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAg
LTc5LDE3ICs3OSwxNyBAQCBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJh
dGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsCiAgICAgfQogfQogCi1GRUdh
dXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0
IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkdhdXNzaWFuQmx1cikKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwg
bV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVz
c2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgs
IGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4
LCB5LCBlZGdlTW9kZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVy
KHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblgoZmxvYXQgeCkKQEAgLTQ4NSw3ICs0ODUsNyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAog
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2
aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAt
NDk2LDkgKzQ5Niw5IEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53
aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVH
YXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVHYXVzc2lh
bkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ewotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCks
IHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsK
ICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBh
ZmZlY3RlZCBwYWludCByZWN0LgpAQCAtNTE5LDExICs1MTksMTEgQEAgdm9pZCBGRUdhdXNzaWFu
Qmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUdh
dXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MzYsMTEgKzUz
Niw5IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
aWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
CiAgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEp
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFl
YjZlYjI4M2JlYWFhMTc2NDdjYmIyZDNlLi43Njk2MjNhZmE1NDJjMGQ4NjI1YWRkYTA1OTI1MGY1
ODVlMDUzYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9h
dCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlv
blgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgo
ZmxvYXQpOwpAQCAtNDUsOSArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAg
ICBGRUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0K
LSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1
c3NpYW5CbHVyIjsgfQorICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAK
QEAgLTY0LDkgKzYxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7
CiAgICAgfTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAog
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04MywzICs4MCw0
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19GSUxURVJfRUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXgg
NjU5YjEwNTVmNjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uZmJkNTAzOTAyYmNjNThl
ZjUzNGY4NWE5OTEwYzRjN2FiNzA1YzM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zNSw4ICszNSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0
ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBs
aWdodFNvdXJjZSwgVHlwZSB0eXBlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkK
K0ZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3Qg
Q29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRWZmZWN0KHR5
cGUpCiAgICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCiAgICAgLCBtX2xpZ2h0U291
cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5n
Q29sb3IpCkBAIC00NzEsMTEgKzQ3MSwxMSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGlu
ZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK3ZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQo
KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAppbmRleCBiMGJiNzBhMTRkMTc0OTUwNjczN2U4OGUwNTE0ZWU3OTY4MjBhNDQ5Li5k
ODUyZjhiMTNkZDc5N2Y4ZTg5OTM1MWY4YjU4ZDM1ODVhMDNmMzhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAt
MjcsNyArMjcsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0
U291cmNlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgpAQCAtNDAsNyAr
MzksNyBAQCBzdHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZF
TGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGZsb2F0
IHN1cmZhY2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9v
bCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOwpAQCAtMTI4LDE2ICsxMjcsMTQgQEAgcHJvdGVjdGVk
OgogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBw
bHlHZW5lcmljUGFyYW1ldGVycyopOwogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9u
V29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7CiAKLSAgICBGRUxpZ2h0aW5n
KEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAg
Y29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5n
IjsgfQorICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBl
KTsKIAogICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQp
OwogCiAgICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0
b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7CiAgICAgdm9pZCBzZXRQ
aXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2Iz
Zi4uZmJmNTAzOTA5ZmM4ZjhhM2RhYWRlNTY5MDMwOTdiMTRjZDVhZjY1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBA
IC0yOCwyMiArMjgsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1l
cmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVy
Z2UpCitGRU1lcmdlOjpGRU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFTWVyZ2UpCiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFTWVyZ2UoKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK3ZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
CiAgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJU
KHNpemUgPiAwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgK
aW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uMDUxOWE1Njg4
YTgzNjNmYzFiYTA2MzIwNGRiMjJmNzQzMWFlMzRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIyLDIzICsyMiwyMSBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUo
RmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToK
LSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KLQotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKaW5kZXggNmFlM2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1OGRhZWQ2Yi4uNWY3
NGNmZDc0ZmI4Zjk4NTQzOTZiNzU3YTRhYzIwZGI0YjYxODczNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cApAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3kpCiAgICAg
LCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZ
KHJhZGl1c1kpCiB7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRl
KEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0
ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlw
ZSwgcmFkaXVzWCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhv
bG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5Ojpz
ZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQpAQCAtNzIs
MTEgKzcyLDEwIEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCit2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBwYWludFJl
Y3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKICAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjQwLDExICsyMzksMTEgQEAg
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgsMTIgKzI1Nywx
MSBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAo
cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3
aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4t
PmdldFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
LSAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0
aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkp
OwogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAt
IDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIApAQCAtMjczLDEwICsy
NzEsMTAgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJy
YXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNl
aWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgp
ICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2Vp
bGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFk
aXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgcGFpbnRp
bmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CisgICAgcGFp
bnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKKyAg
ICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0
YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5n
RGF0YSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCA0OGZjMzU0MTE3ZmMyN2NjZmM4ZTkzZjE0ZWRm
MDc1ZGUzOWM1YTExLi5hZTgxNTE1NGNlYWRhZWVkMzI2YTQ0OTM4NzFjZjNlODk3MGRmYmJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKQEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzQsNyArMzMsNyBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewog
CiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8
RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xv
Z3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0TW9ycGhv
bG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwpAQCAtNDYsMTMgKzQ1LDExIEBA
IHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZF
TW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFTW9ycGhvbG9neSI7IH0KKyAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04NiwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFTW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5
MTdjMmQ2NWFhNDE0MGY2OS4uMDY1MDAxZTAwYjU4ZmM4NTAzMzAxMzdjOGJkNzEzMTU2Zjk3YjE1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZF
T2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9
CiAKLVJlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQg
ZHgsIGZsb2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBm
bG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4
LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQog
CiB2b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKQEAgLTUyLDExICs1MiwxMCBAQCB2b2lk
IEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAKLXZvaWQgRkVP
ZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVPZmZzZXQ6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZsb2F0
UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZp
bHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBwYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwog
ICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKICAgICBlbHNlCkBAIC02NCwxMSArNjMsMTEgQEAgdm9pZCBGRU9mZnNl
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47
CkBAIC03Niw4ICs3NSw3IEBAIHZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAg
ZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4
LCBtX2R5IH0pKTsKKyAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX2R4LCBtX2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVh
YmRhOTBhNDdiMWJmZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uZDNlYzk1YWRkZjEzNDdiNTNl
ZTA0ODdjNDBhZGIxOTAxYWU0NDdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRl
ciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRl
KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHg7IH0KICAgICB2b2lkIHNldER4KGZsb2F0KTsKQEAgLTM3LDEzICszNiwxMSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXREeShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVy
JiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkp
OwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RU9mZnNldCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAgICAgCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTMs
MyArNTAsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRj
Li4zODcwN2IzMDFmZDExMGJlY2JiMDRlMjVjZmM5ODJhMjA1ZmU2NDY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYg
bGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywg
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorRkVTcGVjdWxhckxpZ2h0aW5n
OjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8
TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGln
aHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwg
c3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmcpCiB7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9u
ZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJl
ZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFU3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2Fs
ZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2Nh
bGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVj
dWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29sIEZF
U3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0
YW50KQogewogICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQz
OTgxOGJmM2IyNDk1OGEuLmFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUzMzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMjcsOCArMjcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5n
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBS
ZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOwor
ICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJv
b2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CkBAIC0zOSw4ICszOCw5IEBAIHB1YmxpYzoK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVTcGVjdWxh
ckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNi
YjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi5lNzRhNzhjOWUyMTY5MDFhOTVlYWQx
YjU5ZTZlZmE5NWQ5MDQxYzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0zMSwyMiArMzEsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAKLVJlZjxGRVRp
bGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpj
cmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlz
IGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVj
dCBiZWhhdmlvciBvdGhlcndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBA
IC01OCwxMyArNTgsMTIgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBv
aW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwogICAgIEZsb2F0
UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAg
ICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQpIHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBpZiAo
aW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwg
aW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CiAg
ICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVj
dC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAgICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8g
dGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJl
Y3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRl
cmluZ01vZGUoKSk7CiAgICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5k
ZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uZWQ3Njk1MWZiNWI0
MzFkNTM3MmM0ZDNlZWE1ODU3NTA1M2ZjZDEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yMiwyNyArMjIsMjMgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmls
dGVyJik7CisgICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAg
IEZFVGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQorICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZm
ZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVy
RWZmZWN0VHlwZVRpbGU7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUg
eyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkp
OyB9CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJ
TFRFUl9FRkZFQ1QoRkVUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5
YmI2ZTIwNmExZDJiZmFlYjBjZWE5MTlmMGIuLmQ4MjUzMTYxNzQzYzU2YWFhNTc1ZjUyOTdkZTE3
MzFlYzMwNDUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJv
b3Qgb2YgbQogc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3Rh
dGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpG
RVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpUdXJidWxlbmNlKQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVj
dChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQog
ICAgICwgbV9iYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1
ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVU
dXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNl
RnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0
aXRjaFRpbGVzKQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lY
LCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAog
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2Niwy
MiArMzY2LDIxIEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFz
ZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24o
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAK
ICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmls
dGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9pbnQg
cG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhl
bENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZm
aW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRTaXpl
IGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBm
aWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0
WTsgeSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwog
ICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBvaW50
LnNldFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQg
PSBpbnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJz
ZVNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50
KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0
YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENo
YW5uZWwgKz0gNDsKQEAgLTM5MSwxOSArMzkwLDE4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxs
UmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEm
CiAKIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1l
dGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsK
KyAgICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwg
KnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFt
ZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7
CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBG
RVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
IHsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11
bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0
ZXJTY2FsZSgpKTsKIAogICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKQEAgLTQ0MCw3ICs0MzgsOCBAQCB2b2lk
IEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZp
bGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIHBh
cmFtcy5maWx0ZXIgPSAmZmlsdGVyOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZmZlY3QgPSB0
aGlzOwogICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4
ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5n
RGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CkBA
IC00NTcsNyArNDU2LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYg
dGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRv
byBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdE
YXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1
bGVuY2VUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZj
ZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi41ZTU1MGQ5ZDZiNDA0YjYwNWZhOTE1NDE5MWMzMDA0MmRkMWJk
OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9y
Q29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFz
cyBUdXJidWxlbmNlVHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmls
dGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7Cisg
ICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBl
KTsKQEAgLTk2LDcgKzk1LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxK
b2JzOwogCiAgICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJi
dWxlbmNlKiBmaWx0ZXI7CisgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBG
RVR1cmJ1bGVuY2UqIGVmZmVjdDsKICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJy
YXk7CiAgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwogICAgICAgICBTdGl0Y2hE
YXRhIHN0aXRjaERhdGE7CkBAIC0xMDYsMTkgKzEwNiwxNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwogCi0gICAg
RkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwg
ZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAg
ICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0
Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGlu
Z0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBm
aWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNo
RGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lvbihj
b25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lk
IGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwogCkBAIC0xMzIsMyArMTMwLDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5
YzBjZTI2MTEwYmMxZi4uZjM1ZDliYTQyZmZiMGNhMmUwYzViOGNlY2YzZDYxZDJjN2EwMTc2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDU4ICsyMiw1NyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0
OwogCi1jbGFzcyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZp
bHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0g
MSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAg
ICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+
RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1h
Z2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNl
SW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3Vy
Y2VJbWFnZS5nZXQoKTsgfQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKLSAg
ICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVz
b2x1dGlvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUm
IGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlv
bjsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZUltYWdlUmVjdDsgfQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisgICAg
CisgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVn
aW9uOyB9CisgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7IH0KIAot
ICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNj
YWxlOyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNp
emUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlGaWx0ZXIoKSB7IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9
CisgICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1h
Z2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CisgICAgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsg
fQogCiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdNb2RlOyB9CiAgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNp
emUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwotCiBwcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikK
LSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlvbikKKyAgICBGaWx0
ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUp
CisgICAgICAgIDogRmlsdGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRl
clNjYWxlKGZpbHRlclNjYWxlKQorICAgIHsKKyAgICB9CisKKyAgICBGaWx0ZXIoRmlsdGVyOjpU
eXBlIGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikKKyAg
ICAgICAgOiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2Nh
bGUoZmlsdGVyU2NhbGUpCisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VS
ZWN0KQorICAgICAgICAsIG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKICAgICB7CiAgICAg
fQogCiBwcml2YXRlOgorICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVj
dCBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmls
dGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsK
ICAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1
MWMzNDhlYzdmNjNlNGNjOTI3ZGIxMDguLmUzMzMwYTFmNDY0NTI4ZGE3MzJmZGI2MjhlMjAzMDdm
YzFhODRhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAg
LTM1LDI1ICszNCwxNCBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmls
dGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1f
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCitGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCiB7CiB9
CiAKLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0
ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJz
b2x1dGVQYWludFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lu
cHV0RWZmZWN0cykKQEAgLTk2LDIyICs4NCwyMiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0Ojpk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiAg
ICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwogfQogCi1GbG9hdFJlY3QgRmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRv
bid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSBy
ZWN0LgogICAgIEZsb2F0UmVjdCBzdWJyZWdpb247CiAgICAgaWYgKHVuc2lnbmVkIG51bWJlck9m
SW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lv
biA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
KyAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
bnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBp
bnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7
CiAgICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwog
ICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRl
clJlZ2lvbkluVXNlclNwYWNlKCk7CisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJS
ZWdpb24oKTsKIAogICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWlu
IGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVj
dFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVz
ZXJTcGFjZSgpOworICAgIGlmIChmaWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVRpbGUpCisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAg
IGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKICAgICBpZiAoaGFzWCgpKQpA
QCAtMTI1LDE1ICsxMTMsMTQgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIAogICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihzdWJyZWdpb24pOwogCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVz
b2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJl
Z2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGFic29sdXRlU3VicmVnaW9u
ID0gc3VicmVnaW9uOworICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKICAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2Ug
aXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3Jk
aW5hdGVzLgogICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVn
aW9uKTsKIAogICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJl
Z2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmls
dGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVy
UmVzb2x1dGlvbik7CisgICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKyAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFi
c29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKIAogICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1
dGVTdWJyZWdpb24pOwpAQCAtMTYzLDE0ICsxNTAsMTQgQEAgdW5zaWduZWQgRmlsdGVyRWZmZWN0
Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKICAgICByZXR1cm4gY29sbGVjdEVm
ZmVjdHModGhpcywgYWxsRWZmZWN0cyk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgp
Cit2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAg
aWYgKGhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
aW5wdXRFZmZlY3RzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5n
ZXQoKTsKLSAgICAgICAgaW4tPmFwcGx5KCk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOwog
ICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAt
MTc4LDQ4MiArMTY1LDEwNSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgICAgICB0
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKICAgICB9CiAKLSAgICBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRl
cik7CiAgICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3Vu
ZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRl
VW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29s
dXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8
PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAocmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZl
Y3QoaSktPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVj
ZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6
IG1faW5wdXRFZmZlY3RzKQorICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVz
dWx0SWZOZWVkZWQoKTsKICAgICB9Ci0gICAgCisKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVu
Y3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpOworICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRl
ckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVJlc3VsdCgpCiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBs
aWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0g
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7
Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBp
eGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBo
YXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJU
KCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBs
YXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAg
ICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7
Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhl
bHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4
ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxz
LnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2
c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRh
ICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAg
ICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBp
eGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2gg
cGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBu
ZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBo
YSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVs
RGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5k
IGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAg
ICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9
Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0g
ICAgfQorICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3Vs
dENvbG9yU3BhY2UpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxs
cHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJ
bWFnZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1
cnNpdmUoKQogewogICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhl
IGN1cnJlbnQgZWZmZWN0IGhhcwogICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBl
ZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwor
ICAgIGNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0
cykKKyAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUo
KSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdl
IGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQog
ICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3Vs
dCgpCiB7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVk
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVh
ID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tl
ZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChj
aGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBp
eGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAg
IHJldHVybiBtX2ZpbHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRl
ckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4
ZWxBcnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgSW50
UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFy
ZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlm
IChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3Qu
bWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBz
Y2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRh
KCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0
aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2Fs
ZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVj
dC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdp
biA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4g
PCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwot
ICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUu
d2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlE
ZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdp
bjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVj
dC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4
RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVk
UmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNp
emUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0
aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsK
LSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmln
aW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGls
ZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNv
dXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlv
blNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAg
ICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5n
QWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0g
ICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMg
PSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJj
ZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBp
bnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
LSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAg
ICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNv
bnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICog
NCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0
aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAg
ICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhh
IC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFs
cGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAg
ICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQg
Kz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRl
cyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291
cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9
IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNl
Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEo
KSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0
aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkg
ewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICog
MjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZm
ZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4g
V2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50
UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUo
MSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAv
LyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAg
ICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZm
ZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVs
QnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+
cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiB9CiAK
LXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQorUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5n
IFBpeGVsQnVmZmVyQ29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4g
SW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0
byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9k
ZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVy
bmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAg
Y29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCBy
ZWN0KTsKLSAgICAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZv
cm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJu
IGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKKyAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3Bh
Y2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBGaWx0ZXJFZmZlY3Q6OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVj
dCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0g
ICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFu
ZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJl
c3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRG
b3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgcmV0dXJuIG1f
ZmlsdGVySW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEg
c3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0
aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRv
Q29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgQVNTRVJU
KGhhc1Jlc3VsdCgpKTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGlu
YXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29s
b3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwot
ICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVj
dCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVm
ZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYg
KHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewot
ICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVz
dGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBt
X3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAg
IGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1f
cmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZl
cihkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVj
dCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQordm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKQogewog
ICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZl
cnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJl
c3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFn
ZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVz
dWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBp
eGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50
U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAg
ICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAg
ICAgICAgIEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNw
YWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRT
aXplKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEo
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAg
ICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKKyAgICBpZiAo
IW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgp
LCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBp
cyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAg
QVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNp
emUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Owot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0
ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhp
cyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkg
IT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BB
UkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisg
ICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAg
IAogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBV
U0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5h
bGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAg
ICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENv
bG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVy
SW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQog
CiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFj
Li40OTc0MjE4YmUwNjNmNzI3NGIwM2QxMjliZDNmMDc1NTQ4MTk5MDg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKQEAgLTI0LDEzICsyNCwxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRl
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgog
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC00Niw2NSArNDcsMzYgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVy
RWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZm
ZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVj
dFR5cGVTb3VyY2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVy
RnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAg
ICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAg
ICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJv
cFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAg
SW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhv
bG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAg
ICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAg
ICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0K
LSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKKyAgICB2
b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKIAogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUGl4ZWxC
dWZmZXIqIHVucHJlbXVsdGlwbGllZFJlc3VsdCgpOworICAgIFBpeGVsQnVmZmVyKiBwcmVtdWx0
aXBsaWVkUmVzdWx0KCk7CisKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsdGVySW1hZ2U7IH0KKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5wcmVt
dWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0UHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQgY29weVVu
cHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpIGNvbnN0OworICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworICAgIHZvaWQgY29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOworCiAgICAgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRl
ckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJl
ck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9
CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwogICAgIAot
ICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBt
YW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAg
RmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0
UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CiAK
ICAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCiAg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KQEAg
LTExNCwyMCArODYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9
IGFic29sdXRlUGFpbnRSZWN0OyB9CiAKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVj
dChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4
RWZmZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldE1heEVmZmVj
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9
IG1heEVmZmVjdFJlY3Q7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBp
ZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8v
IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0
ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0
aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAg
ICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgdm9p
ZCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBl
IGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93
bjsgfQotCi0gICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJ
bnRPdXRzZXRzKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJik7CiAKICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7
IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CkBAIC0xNTYsMTEgKzEx
OSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQot
ICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0
ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KICAgICBib29sIGNsaXBz
VG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KICAgICB2b2lkIHNl
dENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQog
CkBAIC0xODEsNDAgKzEzOSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
RmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOworICAgIEZpbHRlckVmZmVjdChUeXBlKTsKICAg
ICAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRl
IGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFsw
LDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwg
Zm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2
b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZElt
YWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFt
cGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpID0gMDsKIAotICAgIEZpbHRlciYgbV9maWx0ZXI7CiAgICAg
RmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBt
X2ZpbHRlckltYWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApA
QCAtMjQ4LDExICsxODQsMTcgQEAgcHJpdmF0ZToKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
bV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsK
ICNlbmRpZgogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9m
aWx0ZXJFZmZlY3RDbGFzc1R5cGU7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJF
ZmZlY3QoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZl
Y3QuZmlsdGVyVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1l
OyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaAppbmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5Y2M0Li41
OWNmN2RmZTM0MzYxMWZiMWE2ZjI2NTJmNjYwYjZjMGI4MTkwNTdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRl
cmVyIHsKICAgICAKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEltYWdlQnVmZmVy
KiBvdXRwdXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29u
c3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZjViYjE1NjM4MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0YWYxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJG
dW5jdGlvbi5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVy
RnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlw
ZSBmaWx0ZXJUeXBlKQorICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5cGUpCit7Cit9CisKK3N0
YXRpYyBpbmxpbmUgY29uc3QgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRl
ck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6
OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRz
PEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9
IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFt
ZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAg
ICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9y
TWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9z
aXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNl
TGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
aXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BTaGFk
b3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZs
b29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5C
bHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1h
Z2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3Jw
aG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1
bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVs
ZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJf
cyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VH
cmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsKKyAg
ICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZp
bHRlck5hbWVzLmdldCgpOworfQorCitjb25zdCBBdG9tU3RyaW5nJiBGaWx0ZXJGdW5jdGlvbjo6
ZmlsdGVyTmFtZShUeXBlIGZpbHRlclR5cGUpCit7CisgICAgYXV0byBpdCA9IGZpbHRlck5hbWVz
KCkuZmluZChmaWx0ZXJUeXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmlsdGVyTmFtZXMoKS5lbmQo
KSk7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3YmU5ODRjNGQxNzc1OGY2NzFhYzJmN2RjNTYx
MmY5ZTFkMjI4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisK
KyAgICAgICAgRkVNaW5pbXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAg
ICAgIEZFQ29sb3JNYXRyaXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAg
IEZFQ29tcG9zaXRlLAorICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1
c2VMaWdodGluZywKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNo
YWRvdywKKyAgICAgICAgRkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAg
IEZFSW1hZ2UsCisgICAgICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAg
ICAgRkVPZmZzZXQsCisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxl
LAorICAgICAgICBGRVR1cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBT
b3VyY2VHcmFwaGljLAorCisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9
OworCisgICAgRmlsdGVyRnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rp
b24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlclR5cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlclR5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBi
b29sIGlzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0Zp
bHRlciB8fCBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0Zp
bHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmlt
dW0gJiYgbV9maWx0ZXJUeXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNv
bnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWUoVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21T
dHJpbmcmIHNvdXJjZUFscGhhTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNl
QWxwaGEpOyB9CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1l
KCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0
IEF0b21TdHJpbmcmIGZpbHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmls
dGVyVHlwZSk7IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUg
bV9maWx0ZXJUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNv
bG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21w
b25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252
b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
aXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZs
b29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJs
dXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTE2YTIzNmVjMzhlYTgyYTM5NTIxZDA0MWU1ZWM5Y2U1
Njk4YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNp
ZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRp
ZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+
IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRmlsdGVySW1hZ2UobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkK
KyAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUo
cmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkK
KyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcmVzb2x1
dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVj
dCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlm
IChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7Cisg
ICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigq
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVu
dCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9u
ZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25l
bnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsx
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1Owor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQg
Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6
ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNp
emUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGgg
PSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBk
ZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwor
CisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0g
c291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQg
KyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VD
b21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNd
OworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAy
NTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9Cisj
ZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7Cisg
ICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2Nv
bG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4
aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH0pOworICAg
ICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6
ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQ
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisg
ICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICB9CisKKyAgICByZXR1
cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
RmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0
byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Cisg
ICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZm
ZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gcGl4ZWxCdWZm
ZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNl
Q29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVz
IHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBj
b2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBm
aWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAm
JiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwg
Y29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNF
RF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9p
ZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXpl
KG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVu
dCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAo
c2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1h
eFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgp
LCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhl
IHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVk
UmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3Qu
eCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4g
PSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwg
MCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAg
ICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVz
dCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47
CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3Qu
bWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAg
ICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVu
ZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJl
Y3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlv
bi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Cisg
ICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2lu
ICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUg
KHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3Vy
Y2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25T
Y2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAg
ICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRl
ckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Cisg
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2Ug
YW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRv
IGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJz
aW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVy
IHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJl
dHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsK
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Cisg
ICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAv
LyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmlt
YWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmls
dGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorewor
ICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkg
PyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAg
ICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNhbFNp
emUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBn
ZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAq
Y29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1
ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRv
IGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpj
b3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUg
b24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZh
bGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1h
Z2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxl
bmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQg
Y29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKwor
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+
PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxB
cnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVt
ZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBp
eGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhl
bHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhl
bERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsK
KyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0Owor
CisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1
c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhl
bHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAor
ICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBl
YWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24K
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgq
cGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAg
ICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxw
aGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdlOjp0
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7
CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMg
aW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlm
IChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
RklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVm
ZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1
cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGlt
YWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRy
YW5zZm9ybVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNv
bG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9w
dDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRp
ZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNi
NWExZjBmMDYzODEzNTNhODFjOTE0ODI4NzI2NzVhOWQyOWZkZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVy
OworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBGbG9hdFNpemUgbG9naWNh
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNl
OyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOwor
CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lk
IGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1hZ2UoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNv
bnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKwor
ICAgIEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJp
bmdNb2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5j
cHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uYTU5NmQ0
OGU0ZDU5YjYzNTE5YzI4OTc2MjRlMGE0OGNmYTBmYWQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAg
LTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMiwyMiBAQCBSZWY8U291cmNlQWxwaGE+IFNvdXJj
ZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9CiAKLWNvbnN0IEF0b21T
dHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3VyY2VBbHBo
YShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VBbHBoYSIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1l
OworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwogfQog
Ci12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCit2b2lkIFNv
dXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
KyAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsK
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2
b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CkBAIC02OSwxMSArNjcs
NCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0czsKIH0KIAotU291cmNl
QWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQotICAgIDogRmls
dGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291cmNlQWxwaGEpCi17Ci0g
ICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVjdCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5YTM2N2ZkNDMyNDJkMWM0
YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi41MmEzOWE0OTI0MTYxMWUwMTE0NDE3YTZhMDRmNjZmMDlj
NjEwMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gKLSNkZWZpbmUgU291
cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIApA
QCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUo
RmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFt
ZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4g
RmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmls
dGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVT
b3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiB9
OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VBbHBoYSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTku
LmQ2NDVhYTkyNTAyZmE3ZmU2NDQ2NjdkYWYzZTA1NWMwOTgzNmMxYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcApAQCAtMjIsMzcgKzIyLDI5IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKGZpbHRlcikpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoKSk7CiB9CiAKLWNvbnN0IEF0b21TdHJp
bmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQorU291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYygpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykKIHsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0
TmFtZSgiU291cmNlR3JhcGhpYyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyJiBmaWx0
ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNv
dXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwogICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAK
LXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgU291cmNl
R3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8
fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBj
ZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uNmJjNDdhMWYwMWI1NTYzNjVi
OTU3OTVlNmEwNWM1YWViMTYzMTJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4LDQxICsxOCwy
NiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3Vy
Y2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZp
bHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBB
dG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFw
aGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRl
cikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQot
ICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0K
LQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRl
ckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291
cmNlSW5wdXQ7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZl
Y3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLQotI2Vu
ZGlmIC8vIFNvdXJjZUdyYXBoaWNfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKFNvdXJjZUdyYXBoaWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUNvY29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMwOWJmMDYzZjQ5OTllMDNiMjE5ZTg1
ZDdlMmQ5Li5kNjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFjNGZjMDcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVk
ZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9G
b3JtYXQuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuY3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmExN2FjMTdkYjVjMDJiNWI2
MTEuLmRmYmZmOWJmOWYyNTBjZjQxNDc0ZDU3OWRlYWNkZTEyMDM4ZmI4OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5j
bHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2lu
Y2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIK
QEAgLTM4LDQ1ICszNSwxODMgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNp
bmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWY8Q1NTRmlsdGVyPiBD
U1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIGJvb2wg
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRp
b25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisK
KyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVy
aW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIo
KQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhp
YyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoYm9v
bCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIDogRmlsdGVy
KEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2FsZUZhY3Rvciwgc2NhbGVG
YWN0b3IgfSkKKyAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4pCisgICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkpCiB7CiB9
CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJs
dXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQoreworICAgIGZsb2F0IHN0ZERl
dmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24o
KSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBz
dGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/
IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQogCi1HcmFwaGljc0NvbnRl
eHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIHJldHVybiBz
b3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVy
RnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
IHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50
ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Cisg
ICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZs
b2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJu
IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwg
ZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZlY3Qo
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRp
b24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRy
aXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2
Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2Nh
bGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAg
ICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisg
ICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBj
b2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkp
IH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVu
dCA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0
IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3Vu
dDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZl
Y3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVy
YXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVy
biBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYg
Y29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xh
bXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmls
dGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZp
bHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291cmNlcyA9IHJlbmRl
cmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBmaWx0ZXJFbGVt
ZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5k
ZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAgaWYgKCFmaWx0ZXJFbGVt
ZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0Zp
bHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQg
ZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJh
dGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVy
ZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50
KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQg
ZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMg
YW55dGhpbmcuCkBAIC04NSwyMzEgKzIyMCwxMjMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NT
RmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNl
QWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkp
OwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0RWxl
bWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVp
bGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwg
dGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZy
b20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9CisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIHJldHVybiBTVkdGaWx0
ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyLmZpbHRlclNjYWxlKCks
IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLCBwcmV2aW91
c0VmZmVjdCk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0
ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkg
ewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVtZW50LnJlbmRl
cmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0g
Q29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6Okxp
bmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAg
ICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVm
ZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5jZUVmZmVjdHMu
YXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVjdHMuYXBwZW5kVmVjdG9y
KFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBlZmZlY3Q7CitzdGF0aWMg
dm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBGaWx0
ZXJDb25zdW1lciBjb25zdW1lcikKK3sKKyAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENT
U0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCisgICAgLy8gcHJv
cGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3Vi
cmVnaW9ucy4KKyAgICBlZmZlY3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJD
b25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOworICAgIGVmZmVjdC5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAogYm9vbCBDU1NGaWx0ZXI6
OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAgICBtX2hhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0g
ICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9w
ZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4o
KTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rpb25zLmNsZWFyKCk7CiAg
ICAgbV9vdXRzZXRzID0geyB9OwogCiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNF
ZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmls
dGVyOworCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8m
IGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3Bl
cmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZl
cmVuY2VPcGVyYXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5
cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hU
TkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRf
TElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dy
YXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAot
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAg
YXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1p
bnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAu
MCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhU
Ri9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAotICAgICAg
ICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZl
Y3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4
OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4z
NDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4Ojpj
cmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJh
bWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGF1
dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4g
aW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJh
dGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBh
cmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlv
biwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAg
ICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRf
TElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lO
VkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBh
dXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwot
ICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzog
ewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsK
LSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
ewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5j
dGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBzdGREZXZpYXRpb24sIHN0
ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8g
RURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBhdXRvJiBkcm9w
U2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRl
KCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9wU2hhZG93T3Bl
cmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRp
b24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xv
cigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywg
ZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVyZXIs
ICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBl
ZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAgIHNldHVwTGFzdEVmZmVj
dFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHByZXZpb3VzRWZm
ZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlrZSBT
VkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBm
aWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNs
aXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAgICAgICBlZmZlY3QtPnNl
dENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9u
KTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0
ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAg
ICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0Vm
ZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0
LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZN
b3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsg
KmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3Qp
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVj
dHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMu
aXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rpb25z
LnNocmlua1RvRml0KCk7CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4u
CisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisKKyAgICAvLyBUaGlz
IHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3Qg
Zm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCk7CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdp
b24pOwogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAg
ICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUo
cmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJs
ZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIg
PSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29y
ZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksICpsYXN0RWZmZWN0KCkpOwog
I2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVy
OjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUlt
YWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVC
YWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKICAgICBpZiAo
ZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZp
bHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMzMSw1MyArMzU4LDY4IEBAIHZvaWQgQ1NTRmlsdGVyOjph
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0
Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBsb2dpY2FsU2l6ZSA9IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCk7
CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgpLnNpemUoKTsKICAgICBp
ZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dp
Y2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29u
dGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmluZ01v
ZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAgICAg
aWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4dC0+
c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6bGFzdEVmZmVj
dCgpCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25zLmxhc3QoKTsKKyAgICBp
ZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdG
aWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisgICAgcmV0dXJuIGRvd25j
YXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCiB2b2lkIENTU0ZpbHRlcjo6
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIHsKLSAgICBhdXRvJiBsYXN0RWZm
ZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBsYXN0RWZmZWN0LmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0
RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsK
KyAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqdGhpcyk7Cisg
ICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwogICAgIC8v
IEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNh
bGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxv
YXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3Vi
UmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2Nh
bGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOworICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBpZiAoSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkg
eworICAgICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7CisgICAgICAgIGVmZmVjdC0+
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKICAgICB9CiB9CiAKIHZv
aWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQogewogICAgIG1fc291cmNl
R3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VBbHBoYSkKLSAgICAgICAg
bV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1f
ZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmNsZWFyUmVzdWx0KCk7
CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCit2b2lkIENTU0ZpbHRlcjo6YXBwbHlGaWx0
ZXIoKQogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CisgICAg
YXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpIHsK
LSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7CisgICAgICAg
IG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cygqdGhpcywgKmVmZmVjdCk7CiAgICAgICAg
IGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0
LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OworICAgICAgICAgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisKKyAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9uLT5hcHBseSgqdGhpcyk7
CisKKyAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJj
ZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzQgKzQzMiwzMCBAQCBMYXlvdXRS
ZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWludDsKIH0KIAotSW1hZ2VC
dWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6
Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJl
ci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQo
KTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogfQogCiB2
b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0KQogewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVj
dDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRl
clJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9
IGZhbHNlOwotfQorICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0ID0gc291cmNlSW1hZ2VS
ZWN0OworICAgIHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXJTY2FsZSgpKTsKIAot
dm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0
UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZm
ZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworICAgIEZpbHRlcjo6c2V0RmlsdGVy
UmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qo
c2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBm
YWxzZTsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAorSW50UmVj
dCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2Vm
ZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOwogICAg
IAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYm
IG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZl
Y3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJl
Z2lvbiB9KTsKKyAgICBpZiAoZWZmZWN0LT5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJl
ciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCisgICAgICAgIHJldHVybiBlZmZl
Y3QtPnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgZmlsdGVyUmVn
aW9uKCkgfSk7CiAgICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQzMCw4ICs0NjgsOSBAQCBJ
bnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAgaWYgKCFtX291dHNldHMu
aXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygp
OworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgbV9vdXRz
ZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4gbV9vdXRzZXRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBiOTE5MTdiODA0YzkyZDk0
MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uZWUzZGQ5ZmRmNjUxZDYzNTkzZmY0ZDkyYzkxYTE2MzM1
YWM3ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMzgsNjkgKzM4
LDUwIEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xh
c3MgU291cmNlQWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCiBlbnVtIGNsYXNzIEZpbHRl
ckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENT
U0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVy
PiBjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHNj
YWxlRmFjdG9yID0gMSk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKIAogICAgIGJvb2wgaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCisgICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50
JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKICAgICB2b2lkIGRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0
cygpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNT
U0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmls
dGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZp
bHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVj
dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW50T3V0c2V0
cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3Rz
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7
CisgICAgdm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CisgICAgSW50UmVj
dCBvdXRwdXRSZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3Qo
KSBjb25zdDsKLQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5
UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QpOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBG
bG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Citwcml2YXRlOgorICAgIENTU0ZpbHRlcihib29sIGhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpOworCisgICAgYm9vbCBtX2dy
YXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVS
ZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKLSAgICBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+IG1fZWZmZWN0czsKICAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VH
cmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7CisgICAgVmVj
dG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogCiAgICAgbXV0YWJsZSBJbnRP
dXRzZXRzIG1fb3V0c2V0czsKIAotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4geyBmYWxzZSB9OwotICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCmluZGV4IDBjMjY2OTYyOTkxNzRiZDZmZDg5YzYyYjFhMDIyOTZmYTg5ZTRi
ZDkuLmY3ZTczYjJmNTAxNDhjZDY2YzJiNjlkZWYxYjE0YTUzOTkyZjA0ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIyNiw3ICszMjI2LDcgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxj
dWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwg
eyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmls
dGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAg
IEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5G
aWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRS
ZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOwogICAg
IGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUwYTdk
NWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZmQ0N2Q3Mjk3Y2U3YWMwZDkxMDAx
YjlkZWEzNWZiNGJlZjk3YjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDExIEBAIHZvaWQgUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBz
Y2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9m
aWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAg
ICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRl
ci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmls
dGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVy
bWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRv
IGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0
bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5n
KSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1FOiB0aGlzIHJlYnVpbGRz
IHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0
IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5
bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAg
bV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVu
ZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3Qo
R3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZp
bHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJz
OjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBh
aW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTE0NSw2ICsxMzMsMTMgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIu
dXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICBpZiAoaGFzVXBk
YXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0ZXItPmxhc3RFZmZlY3QoKSkgeworICAgICAgICAv
LyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIu
IEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bworICAgICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIg
cHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4K
KyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCku
ZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAg
ZWxzZSB7CkBAIC0xNTksOCArMTU0LDYgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZp
bHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBt
X3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAgIHJlc2V0RGly
dHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChkZXN0
aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRl
ci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0
ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKQEAgLTE4NCwxNCArMTc3LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7CiAg
ICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAgICBmaWx0ZXIuYXBwbHko
KTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAogICAgIC8vIEdldCB0aGUgZmlsdGVyZWQg
b3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgogICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBm
aWx0ZXIub3V0cHV0UmVjdCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCks
IG1fcGFpbnRPZmZzZXQueSgpKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0
ZXIub3V0cHV0KCkpCisgICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQo
KSkgeworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRl
clNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwog
ICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIs
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0
LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBmaWx0ZXIuY2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkwYjcwMDNkN2U3ODQ0Yzkx
OTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0NGRhMDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVjdCByZXBhaW50
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBh
aW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRl
c3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDE5NTA5
ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjU2ZGQxYzIwNWZmNzY5Njg0YmEw
YjcxYzQ0OTBmNWIxYmI0ZWE0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC04Miw0MCArODIsNiBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihj
bGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFy
ZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYg
ZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxk
Tm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+
IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQot
ICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7
Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5k
aW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsK
LSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRl
cik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVm
ZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAg
IGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigp
LCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmli
dXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMo
U1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMo
KSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkg
ewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCkt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJ
bnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNS
R0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQu
cmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwot
fQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xNDMsNDUgKzEwOSwzNiBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBFbGltaW5hdGUgc2hl
YXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBw
cm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJh
bnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7
CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBh
YnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKICAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUg
Ym91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCiAgICAgZmls
dGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7CiAg
ICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRh
cmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1Jl
Z2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBw
cmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMo
KSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAg
ZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJG
cmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7
Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZp
bHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7
Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGlu
dGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0
ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1Jl
Z2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3Vy
Y2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLQotICAgIC8vIFNl
dCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+
c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2lu
Z1JlZ2lvbiA9IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb247CisgICAgYWJzb2x1dGVEcmF3aW5n
UmVnaW9uLnNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpOwogCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAg
RmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVj
dCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENyZWF0ZSB0aGUg
U1ZHRmlsdGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxT
VkdGaWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6
Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxl
LCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJv
dW5kaW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXIt
Pmxhc3RFZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlS
ZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKIAotICAg
IGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGxh
c3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqZmlsdGVyRGF0YS0+
ZmlsdGVyKTsKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0
UmVjdCgpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmln
IGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5l
dyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
c3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+
c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpKSB7CisgICAgICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpOworICAgICAgICBs
YXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKmZpbHRlckRhdGEt
PmZpbHRlcik7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHks
IHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KQEAgLTE5NCw5ICsxNTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAgIC8vIENoYW5nZSB0aGUg
Y29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50
IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KLSAgICBBZmZpbmVUcmFu
c2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShz
Y2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11
bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGZpbHRlclNj
YWxlLndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAwLCAwKTsKIAogICAgIGF1
dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJf
U1JHQikKQEAgLTI2OSw3ICsyMjQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAg
ICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJE
YXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBmaWx0ZXJE
YXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCiAgICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRl
ckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZp
bHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUK
QEAgLTI4MSwyMSArMjM2LDE2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgIC8v
IEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAoZmlsdGVyRGF0YS0+c3Rh
dGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgogICAgICAgICBpZiAoIWxhc3RFZmZlY3QtPmhhc1Jl
c3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QXBw
bHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwotICAgICAgICAgICAgbGFz
dEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgICAgICAgICBsYXN0
RWZmZWN0LT5hcHBseSgqZmlsdGVyRGF0YS5maWx0ZXIpOwogICAgICAgICAgICAgbGFzdEVmZmVj
dC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CiAgICAgICAgIH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1
aWx0OwogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAgICAgICAg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7Ci0KLSAgICAgICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEg
LyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0
YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZp
bHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0
ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpKTsKICAgICAgICAgfQogICAg
IH0KICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
aW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4MDdjNy4uNjRlM2FjNWFl
YWM4MGFkZjllMjZhYjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00MzIsMTEgKzQz
MiwxMyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB0cyA8PCAiXG4iOwogICAg
ICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8g
dGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8g
ZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlS
ZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxk
ZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAg
ICBGbG9hdFNpemUgZHVtbXlTY2FsZSgxLCAxKTsKKyAgICAgICAgU1ZHRmlsdGVyQnVpbGRlciBi
dWlsZGVyOworICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmls
dGVyLmZpbHRlckVsZW1lbnQoKSwgYnVpbGRlciwgZHVtbXlTY2FsZSwgZHVtbXlSZWN0LCBkdW1t
eVJlY3QsIGR1bW15UmVjdCk7CisgICAgICAgIGlmIChkdW1teUZpbHRlcikgewogICAgICAgICAg
ICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwogCi0gICAgICAgICAg
ICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQor
ICAgICAgICAgICAgaWYgKGF1dG8gbGFzdEVmZmVjdCA9IGR1bW15RmlsdGVyLT5sYXN0RWZmZWN0
KCkpCiAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJlc291cmNlVHlwZSgpID09
IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQwNjQzMWY2ODYuLjA1
NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsxMDAsMTYgQEAgdm9pZCBTVkdG
RUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1
dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8g
aW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKIAogICAgIGlmICgh
aW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1
dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1dG8gZWZm
ZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZm
ZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdj
YjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmViYTlhYmI1ODMyOGY0ZGFiZjM0
MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCmlu
ZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLmNkZWJlZjE4YTFm
ZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEwMCw5IEBAIHZvaWQgU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxk
ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAgICAgZmlsdGVy
VmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbG9y
TWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFs
dWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07
CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIxMmU3N2JlMjA2YjljNWM0
MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBkYmRkNjk1MjQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaApAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggOTBhNTViN2VmZmY3YTNm
ZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgzZWJmMWVhYzBhZGFiMTExMmZl
ZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0
dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWls
ZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAgICAgICAgICAg
IGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFuc2ZlckZ1bmN0
aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZlOGI5OTNhNGRkNTQ4NjMu
LjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5ODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCkBAIC00Myw3
ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNoYW5nZWQgbWlz
c2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3Bw
CmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUuLjdmY2VkMmU2
NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkgKzEzMSwxNiBAQCB2b2lkIFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBj
b25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEo
KSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkp
OwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3Zn
T3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZm
ZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEp
OwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisgICAgYXV0byBlZmZlY3Qg
PSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0
KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSwgV1RG
TW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2NTdhMGZhMzA0NGRmNWI3
YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2YThiNTNhZmY1NjlkOGQxMWRj
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKQEAgLTEw
OSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNh
YmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTljOGI3ZmMwYTUwNzVlZGU4MWEw
ZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9pZCBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
ciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0
Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNv
clZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6
OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNv
clZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRn
ZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVu
Z3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNv
clZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRn
ZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVu
Z3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOworICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMzOS4uMWI2YmJl
NDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFk
NmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4YTEzNDE1MWRhMzY3ZjRjNjk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHRFCiAgICAg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIu
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXIKICAg
ICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAg
YXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxk
ZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGZp
bHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsxNzAsOCBAQCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xv
ckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0
aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVh
dGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBl
ZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
ZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZ
KCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggNjg5OTk2
MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJhYWM4YjAzZWQyNGQyMWQ5OGI1
MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0
aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZkNzIyZGZkMDUxNzNkOGMy
Li42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWExYTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcApAQCAtMTE1
LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1
dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIg
PSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5w
dXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3Rvcigp
LCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMu
cmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAg
ICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1dG8gZWZmZWN0ID0gRkVE
aXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0
b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShp
bnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXgg
YWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uZjJjNmQwYjE4Zjg1Yzk0
ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2YTg5YmZj
NWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5OWNmNjIxNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTk3LDcgKzk3
LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTExLDEyICsxMTEsMTIgQEAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAg
ICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgaWYgKCFpbnB1
dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURyb3BT
aGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBk
eCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9
IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkp
OworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAg
IHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEyYjYyMWI4Y2JlNDJmNzQ1MWQu
LjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4ZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5k
ZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4uZjMyOGNjN2MxNWVl
NzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVG
bG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU1ZHRkVGbG9vZEVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVh
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29k
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2OSw3IEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpj
cmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0
ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVt
ZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uYWVk
NjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdhOTk4MjI0YzkyMTk1NTUy
NDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNkY2E3NzVjOWI3ZWZhNWRiOWRj
ODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGlm
ICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChzdGREZXZpYXRp
b25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3Rk
RGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUo
KSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAg
ICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDllMjE0ZmU5NGFlNDEwMDFjZTQ4
ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNkYmE1NDljYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKQEAgLTUzLDcgKzUz
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLjQy
YTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQsMTYgQEAgdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3
b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBt
X2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKG1fY2Fj
aGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVu
dEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAgICAgaWYgKGlzRGVzY2VuZGFu
dE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5j
ZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7Cisg
ICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UodHJlZVNjb3BlKCksIGhy
ZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5M2UwZDBkYjhi
ODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYwZWJmYzI3ZDAxMzliMmMzNzY4
NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCkBA
IC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05v
ZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VSZXNvdXJj
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXggYmUyZjZl
MDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMwZDU4MmQwMTNiODdjZjBlM2Mx
MTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1l
bnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVtZW50PiBTVkdGRU1l
cmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVmZmVjdCA9IEZFTWVyZ2U6OmNy
ZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlucHV0czsKKyAgICAKICAgICBm
b3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
dD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3Qg
PSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAg
aWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBt
ZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOwpAQCAtNjIsNiArNjEsOCBA
QCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpj
cmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0gV1RGTW92ZShtZXJnZUlucHV0
cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNjZjRlM2MyLi40
MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRlOgogICAgIHVz
aW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVNZXJn
ZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29u
c3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5k
ZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uOGIwNTYwYzRkYTgw
MDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsxMTQsMTkgQEAgdm9pZCBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxvYXQgeVJhZGl1
cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZsb2F0IHlSYWRpdXMgPSBy
YWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5OjpjcmVhdGUo
ZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9n
eTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCmluZGV4
IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2NjkuLmIyMWI2ZjVjNDdiNzg1
ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAg
ICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8
U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAppbmRleCAwMzgy
NjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45YjBkNzAyYTFkMjU4NTQyMDhi
OTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZp
bHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVh
dGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVh
dGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5YmVlLi44OTk2
ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uNTYz
YjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMTYwLDkg
KzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIs
IEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE3
MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAgIGlmICghbGlnaHRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNl
ID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgYXV0byBs
aWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyQnVpbGRlcik7CiAK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlCiAg
ICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7
CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwg
Y29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25l
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhw
b25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92
ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlhMWQzZmQ4YjMx
MThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1MjE2MjExNjUxMGQwMDliYzZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
LCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3
NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZkNzI0NjdhYzIwZjRmZmY3ZDRk
YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC03MCwxNSAr
NzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRl
KCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAg
ICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgK
aW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMzYTkxZi4uY2FiYWNlNmJk
MDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5kZXggMTE1NjExMTlk
ODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdiOWU4ZTA4YTQzZTdjY2NiNjgw
OWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8
fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgp
LCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9
PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMo
KSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJm
OWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLjUwYWY5MTBlYjU4ZTJjOTIy
NDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WCB7IFNWR0FuaW1hdGVk
TnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBjOThiMTNlZDk2
Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li4zOGQ0OTg2MDkzMzgyMTg3YmFkMjI0ZDI5
N2Q0MjVjOTFkZTUzOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zOCw3ICszOCw3IEBAIGNs
YXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVt
ZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZl
Y3QqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CiAgICAgLy8g
UmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQg
b25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4
M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjIxOTJlODE1YjJjYjYyNzU3NzgyNzcwZjViMjEzNGM4
YjZkZWM0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwCkBAIC0zNSw0MCArMzUsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKK0ZFSW1hZ2U6OkZFSW1h
Z2UoUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
JiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVJbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3ByZXNlcnZlQXNw
ZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotRkVJbWFnZTo6RkVJbWFnZShG
aWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCitGRUltYWdlOjpGRUltYWdl
KFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVm
ZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBtX3RyZWVTY29wZSgmdHJl
ZVNjb3BlKQogICAgICwgbV9ocmVmKGhyZWYpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8o
cHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0
ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1h
Z2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShpbWFnZSwgcHJlc2Vy
dmVBc3BlY3RSYXRpbykpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0
cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2Uo
VHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNw
ZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKHRyZWVTY29wZSwg
aHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi12b2lkIEZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9
IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOworICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAg
RmxvYXRSZWN0IHNyY1JlY3Q7CiAgICAgaWYgKG1faW1hZ2UpIHsKICAgICAgICAgc3JjUmVjdC5z
ZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50
cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJF
bGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0
ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICB9IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpIHsKKyAgICAgICAgc3JjUmVjdCA9IHJl
bmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgICAgICBzcmNSZWN0
LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBpZiAoY2xpcHNUb0Jv
dW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CkBA
IC04Nyw3ICs5MCw3IEBAIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
cigpIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigpOwogfQogCi12
b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFSW1hZ2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwogICAgIGlmICghbV9pbWFnZSAm
JiAhcmVuZGVyZXIpCkBAIC05NiwxNiArOTksMTggQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCiAgICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFu
c2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBkZXN0UmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAg
ICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
OwotICAgIGVsc2UgeworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzcmNSZWN0ID0gcmVu
ZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgICAgIHNyY1JlY3Qu
c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwogICAgICAgICBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAg
ICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAg
IGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4
dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0LnNjYWxlKGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3du
Y2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNvbnRl
eHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2N2Jk
ZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmM0MjEzY2FmNzJjZjY0OWExZWMxZjJkN2EyMWU0ZmFiZWQy
NDM3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmgKQEAgLTM0LDIyICszNCwxOCBAQCBjbGFzcyBUcmVlU2NvcGU7CiAKIGNsYXNzIEZF
SW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+
IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxG
RUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRl
ZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUltYWdl
IjsgfQotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAgRkVJbWFnZShSZWZQdHI8
SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBGRUltYWdl
KFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYpOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwpAQCAtNjEsMyArNTcs
NSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4Nzkw
OGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjgzZjM0MWFkMzQ1N2NkNGExMWEzMGQ1MmNiYzky
NzFkZjAyYTkzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsMjkgKzIyLDgxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNW
R0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkK
LSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVj
dCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNj
YWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlv
dXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWls
ZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIHRhcmdldEJv
dW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQor
eworICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC5wcmlt
aXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWDsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoZmlsdGVy
U2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwg
cHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXByZXZpb3VzRWZmZWN0KQor
ICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNlR3JhcGhpYzo6Y3JlYXRl
KCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKHsgKnBy
ZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVt
ZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZmZWN0ID0gYnVpbGRlci5i
dWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKKyAgICBpZiAobGFzdEVmZmVjdC0+dG90YWxO
dW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0
RWZmZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRl
cjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJS
ZWdpb24pCiAgICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAg
ICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShl
ZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVy
OjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNp
emUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAog
ewogICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQogICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFy
Z2V0Qm91bmRpbmdCb3guc2l6ZSgpOwogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2Zp
bHRlclJlZ2lvbi5zaXplKCk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2Fs
ZShzaXplKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVy
KQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7CisgICAg
YXBwbHlGaWx0ZXIoKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5RmlsdGVyKCkKK3sKKyAg
ICBtX2xhc3RFZmZlY3QtPmFwcGx5KCp0aGlzKTsKK30KKworSW50T3V0c2V0cyBTVkdGaWx0ZXI6
Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZlY3QtPm91dHNldHMoKTsK
IH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQordm9pZCBTVkdGaWx0
ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIo
YWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91
bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBtX2xhc3RFZmZl
Y3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmlu
ZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLmZlODIyZDgxZjlj
Y2E0NjExMGE4N2UyYjA0ODhmMzZlMGFlMGJlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw0MSArMjAsNDYgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0
ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQor
ICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNW
R0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIEZp
bHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVy
PiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxl
bWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCog
cHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNj
YWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhcHBseShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29sIGlzU1ZHRmls
dGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2b2lkIHNldExh
c3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFzdEVmZmVj
dCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2Rl
KTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsK
KworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY2xl
YXJSZXN1bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9h
dFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdp
b247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5p
c1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdGaWx0ZXIoKTsg
fQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYz
YTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hODZjMGE5Y2M5OWNjY2MzNTg1
M2QzY2QyNDkwMjc4NDZmYmFhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjAgKzIwLDc1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQordm9pZCBT
VkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNv
dXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFw
aGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3Vy
Y2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMp
KTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9O
X0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xv
ckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYg
KGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5k
ZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKwor
ICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1
dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcigm
ZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0K
KworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYKKworUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKFNW
R0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3Vu
dENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGVmZmVjdCA9IGVmZmVjdEVs
ZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAg
Y2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
CisgICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQo
KSk7CisgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0
OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4o
JmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpKTsK
KworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAg
ICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29s
b3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2Vu
ZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxlbWVudC5yZW5kZXJlcigp
KQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5
UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwg
ZWZmZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZWZmZWN0OworfQorCiB2b2lkIFNWR0ZpbHRl
ckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjNzdh
ZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li5iN2I4MjRiNDg0MzIzMjU3N2Qy
MTMwZDg0NmFhYzhiN2YwOWRlOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0zNyw3ICszNyw3IEBAIGNs
YXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0
ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9
IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVj
dCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KQEAgLTY1
LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7CiAgICAgdm9pZCBj
bGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAgICB2b2lkIHNldHVwQnVp
bHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmKTsKKwog
cHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCiAgICAgewpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGY2MmQ0ZWYyNDZiZDczOGE4MjVmZmEwZjdjZDZhNzkxYTJkOTQ2NDYuLjIyOTEyMGM5YWYx
Y2ExMjMzOTA4ZTNiY2E2OTA2MGI5N2U0MmVhODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAy
MS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBb
R1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50
byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTEt
MDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQ
cm9jZXNzXSBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJvbSBGaWx0ZXJFZmZlY3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjU1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28g
ZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVzdEV4cGVjdGF0aW9ucy4K
KworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAtMzEgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENT
U0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIw
MjEtMTEtMDEgIE1pY2hhZWwgU21pdGggIDxtaWtlQHczLm9yZz4KIAogICAgICAgICBbV2ViSW5z
cGVjdG9yXVtDT1JTXSBTaG93IEhUVFAgc3RhdHVzIGNvZGUgaW4gQ09SUyBtZXNzYWdlcy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0
RXhwZWN0YXRpb25zCmluZGV4IGU5MWY0MWU4ODJkNTZlYzE5YzZlNWYyMjJlOWY3ZjUzZTQ2YmI4
MWUuLmZhYmRjZWZkMDA4MTA2OWYxMzUzNjdkOTEyNDY4NzI3ZDlmYmQ4YzIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNTE4NiwzICs1MTg2LDE4IEBAIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBv
bGljeS9wbHVnaW5zLXR5cGVzLWJsb2Nrcy1xdWlja3RpbWUtcGx1Z2luLXJlcGxhY2VtZW50CiBz
ZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1Z2lucy10eXBlcy1ibG9ja3MteW91dHVi
ZS1wbHVnaW4tcmVwbGFjZW1lbnQtd2l0aG91dC1taW1lLXR5cGUuaHRtbCBbIFNraXAgXQogc2Vj
dXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMtYmxvY2tzLXlvdXR1YmUt
cGx1Z2luLXJlcGxhY2VtZW50Lmh0bWwgWyBTa2lwIF0KIHVzZXJzY3JpcHRzL3VzZXItc2NyaXB0
LXBsdWdpbi1kb2N1bWVudC5odG1sIFsgU2tpcCBdCisKKyMgVGhlc2UgZmFpbHVyZXMgc2hvdWxk
IGJlIGZpeGVkIG9uY2Ugd2Via2l0Lm9yZy9iLzIzMTI1MyBpcyByZXNvbHZlZAord2Via2l0Lm9y
Zy9iLzIzMTI1MyBjb21wb3NpdGluZy9maWx0ZXJzL3N3LW5lc3RlZC1zaGFkb3ctb3ZlcmxhcHMt
aHctbmVzdGVkLXNoYWRvdy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGNv
bXBvc2l0aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBzLWh3LWxheWVyLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1zaGFkb3ct
b3ZlcmxhcHMtaHctc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMg
Y3NzMy9maWx0ZXJzL2ZpbHRlcnMtb24tc3ZnLXJvb3QuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzMTI1MyBjc3MzL2ZpbHRlcnMvc3ZnLWJsdXItZmlsdGVyLWNsaXBw
ZWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBmYXN0L2Zp
bHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYmx1ci5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjMxMjUzIGZhc3QvZ3JhZGllbnRzL2NvbmljLWdyYWRpZW50LWV4dGVuZGVk
LXN0b3BzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgaW1w
b3J0ZWQvbW96aWxsYS9zdmcvZHluYW1pYy1maWx0ZXItY29udGVudHMtMDFhLnN2ZyBbIEltYWdl
T25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9m
aWx0ZXJzL2ZlQ29tcG9zaXRlLTIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjMxMjUzIGltcG9ydGVkL21vemlsbGEvc3ZnL2ZpbHRlcnMvZmVTcGVjdWxhckxpZ2h0aW5n
LTEuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIHN2Zy9maWx0
ZXJzL2ZlTGlnaHRpbmctY2xpcHBlZC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzEyNTMgc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3Zn
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIHN2Zy9maWx0ZXJzL2Zl
SW1hZ2UtY29sb3ItZmlkZWxpdHkuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>
<flag name="commit-queue"
          id="467721"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443073</attachid>
            <date>2021-11-02 02:16:16 -0700</date>
            <delta_ts>2021-11-02 03:29:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211102021615.patch</filename>
            <type>text/plain</type>
            <size>311730</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uYzAxZjBlMWU3ZGJmZjE5NzI3Zjc5OTU5MjA0N2Jk
ZjRmNmE2ZTQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyMSBAQAorMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5n
IHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMg
aW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQnLiBUaGlzIHdpbGwKKyAg
ICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2ls
bCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3Ns
eSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9uLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0
ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxs
aW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNy
ZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9y
IGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBj
cmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICByZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcHBvc2l0ZSAKKyAgICAg
ICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkuIENvcnJlY3RpbmcgdGhl
IHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJp
bmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZm
ZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERl
bGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3Zl
ZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNS
ZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVyRWZmZWN0LCB3ZSBhcmUK
KyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIHRvIHRoZSBG
aWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBuZWVkZWQuCisKKyAgICAg
ICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVu
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1h
Z2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNl
cGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6bGFzdEVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAg
ICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVp
bGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
Lmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmls
dGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQgYXMg
YW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24g
aW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFz
c29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIg
d2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0
ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhl
IHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgor
ICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNp
bmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhl
IFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRv
IGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlv
biBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEg
cG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5k
IENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRl
ciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZp
bmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0
IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVt
ZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhl
IHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhD
bGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2lu
ZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRo
aXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBk
aXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVm
ZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVG
YWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNp
emUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAg
ICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNr
ZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29v
cmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAg
ICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQg
Im1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpm
aWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJT
Y2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisK
KzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhl
IGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBo
b2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhp
cyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0Cisg
ICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24g
aW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rp
b24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVy
RWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJl
cGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAg
ICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNW
R0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
ZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6
OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9s
bXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdyZW9yZGVyLWN0b3IgaW4g
Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3ZGMzYmQyY2VkMTE4NGMy
ZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4MTFjOGNiY2M5YjE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzU1
YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLmM0MjQ0NDgxYzM5ZDhmM2E5Nzg0
ZGY3Njc0ZDhhYmYwZDM3NTU1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3IEBACiAJCTcyNEVEMzMy
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyog
SlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyog
QWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgw
RDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8q
IEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLzsgfTsKIAkJ
NzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyog
TmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmls
dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1By
b3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0
b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0MjI0MUJG
QjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZl
UHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFu
aW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU3MSw2ICsxMDU3NCw4
IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0
RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0
MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZE
IC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMkIy
NzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDEx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
N0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MjkxLDYgKzI1Mjk2LDEwIEBACiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRl
ckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZp
bHRlckZ1bmN0aW9uLmNwcCAqLywKKwkJCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmls
dGVyRnVuY3Rpb24uaCAqLywKKwkJCQk3MjZCRTAyOTI3MkZCMTcxMDA3MzhGRkQgLyogRmlsdGVy
SW1hZ2UuY3BwICovLAorCQkJCTcyNkJFMDJCMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0ZXJJbWFn
ZS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24u
Y3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24u
aCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5j
cHAgKi8sCkBAIC0zMjc4Myw2ICszMjc5Miw3IEBACiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgw
REVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkM4NTY1MzQyNEMwRjcz
QzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQky
Q0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkJFMDJEMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0ZXJJ
bWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZp
bHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0RE
M0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5
NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggYzY3YTM1YjA3MTViNzIxZWQ4
OTkyZGVjZDQ5ZmE4ZDBiODA2NDc3MC4uZTA3ZjU0YTM2ZDMyYTIzM2IzMDc2NmM0ZDc2NjIyZTY4
ZWNmMDQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMTE2LDIwICsxMTYsMjIgQEAgUmVmUHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpp
bWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRy
YW5zZm9ybSBJbWFnZSBpbnRvIEltYWdlQnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBU
aGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgot
ICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCF0ZXh0dXJlKQorICAgIGF1dG8gcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byBzb3VyY2VJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFzb3VyY2VJ
bWFnZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBhdXRvIGlt
YWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OwotICAgIHRleHR1cmUtPmNvbnRleHQo
KS5kcmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gc291cmNlSW1hZ2VSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CisgICAgc291cmNlSW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2UoKmltYWdlLCBzb3VyY2VJbWFnZVJlY3QpOwogCi0gICAgYXV0byBjc3NGaWx0ZXIg
PSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RG
TW92ZSh0ZXh0dXJlKSk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3QoaW1hZ2VS
ZWN0KTsKLSAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3QpOworICAgIGF1
dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUobV9maWx0ZXJPcGVyYXRpb25zLCByZW5k
ZXJpbmdNb2RlKTsKKyAgICAKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChzb3Vy
Y2VJbWFnZVJlY3QpOwogICAgIGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0
ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFwcGx5KCk7CisKKyAg
ICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKTsKKyAgICBj
c3NGaWx0ZXItPmFwcGx5RmlsdGVyKCk7CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXIt
Pm91dHB1dCgpOwogICAgIGlmICghb3V0cHV0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAppbmRleCBlNmM4ZGY0ZDU1YjQ1NjEzNTQ5ZTNhZjQ5MTky
YTI2ZTJjMDQ0YWY3Li5lN2JjODUzMjcyYWI0ZGFmN2M5Yjg1MDE4NmNjOTlhOTc0NGY5MzVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApAQCAt
NDcsNyArNDcsNyBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3JlYXRlKEZpbHRlckVmZmVj
dCYpOwogICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29udGV4dCgpOwotICAgIHZv
aWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlFZmZl
Y3RzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAgIGJvb2wgaGFzUmVz
dWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQogICAgIEltYWdlQnVm
ZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3Qg
RmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CkBAIC01NSwxMiArNTUsMTIgQEAgcHVibGljOgog
ICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7CiAgICAgCiBwcml2YXRlOgotICAg
IFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOworICAg
IFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYsIEZpbHRl
ckVmZmVjdCYpOwogICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKICAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKGNvbnN0IEZpbHRlciYpOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZv
ckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5Q
dHI8Q0lJbWFnZT4+Jik7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25l
bnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxD
SUltYWdlPj4mKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQppbmRleCA5N2UxMTM3YjI5ZDcxYzJiNTQ0MTU3MzA2NzI0MDBiODI0Mjhi
MzYxLi44YjQwMDE3NzAwZTEwYzY4N2JhNzA2ZTU1OTZiOGMwYjIzMGJhMjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC03MiwxMSAr
NzIsMTEgQEAgc3RhdGljIGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGUKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZm
ZWN0KQogewogICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0
aGV5IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNz
VHlwZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7
CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6IHsKICAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgpAQCAtODgsOTAgKzg4LDU2IEBAIGJvb2wgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZp
bHRlckVmZmVjdCYgZWZmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpc051bGxPckxpbmVhckNvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0
KSk7CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VMaWdo
dGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3NpYW5C
bHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1l
cmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQor
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgbV9vdXRwdXRJ
bWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7CisgICAgbV9vdXRwdXRJbWFnZSA9
IGNvbm5lY3RDSUZpbHRlcnMoZmlsdGVyLCBsYXN0RWZmZWN0KTsKICAgICBpZiAoIW1fb3V0cHV0
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RFZmZl
Y3QpOwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCitSZXRhaW5QdHI8Q0lJ
bWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewogICAgIFZlY3RvcjxS
ZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwogICAgIAogICAgIGZvciAoYXV0byBpbiA6
IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25u
ZWN0Q0lGaWx0ZXJzKCppbik7CisgICAgICAgIGF1dG8gaW5wdXRJbWFnZSA9IGNvbm5lY3RDSUZp
bHRlcnMoZmlsdGVyLCAqaW4pOwogICAgICAgICBpZiAoIWlucHV0SW1hZ2UpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2Up
OwogICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBl
ZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKICAgICBlZmZlY3Quc2V0
UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAg
ICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJF
ZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlclR5cGUoKSkgewog
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1
cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkp
OwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0
dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhmaWx0ZXIpOworICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0
cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpbWFn
ZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZm
ZWN0KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0
ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBD
SUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGln
aHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFu
Qmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpN
ZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJldGFpblB0cjxDSUlt
YWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGlj
KFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5z
b3VyY2VJbWFnZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3Vy
Y2VJbWFnZSgpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIApAQCAtMjc2LDcgKzI0Miw3IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6b3V0cHV0KCkgY29uc3QKIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQog
ewogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShs
YXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291dHB1dEltYWdl
QnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbGFzdEVm
ZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2Uo
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBtX291dHB1dEltYWdlQnVmZmVyID0gSU9TdXJm
YWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgbGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdl
QnVmZmVyKSB7CiAgICAgICAgIGNsZWFyUmVzdWx0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4
OCw3ICsyNTQsNiBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJU
b0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdAogRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RF
ZmZlY3QpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVjdC5maWx0
ZXIoKS5maWx0ZXJTY2FsZSgpKTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7CiAgICAgcmV0dXJuIGRlc3RSZWN0OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2Zp
bHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEw
ZmExNzFjZjE4Li4zNjc3MmIwZjNlYTk0ZTg1ZTY0MmM0YmEwZjY5ZDA3Mjc3NDAwNDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMv
RkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUv
YXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTA3LDEyICsxMDcsMTIgQEAgcHVibGljOgog
ICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQg
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0g
aW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggNWFjN2Y0OTBkNGNkYTUz
M2E0MWY1YzNkODU0NTMyYzE4YWRjZGI2Ni4uNTY0NGZlYTdiZjc3YjY0ZmVmZjc4NTM1MDUzNDUx
MjdlNGE0Y2FiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC0zNCwxNSArMzQsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9k
ZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQorRkVCbGVuZDo6RkVC
bGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFQmxlbmQpCiAgICAgLCBtX21vZGUobW9kZSkKIHsKIH0KIAotUmVmPEZFQmxlbmQ+IEZF
QmxlbmQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCitSZWY8RkVCbGVu
ZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVCbGVuZChtb2RlKSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9k
ZSBtb2RlKQpAQCAtNTQsMTIgKzU0LDEyIEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJs
ZW5kTW9kZSBtb2RlKQogfQogCiAjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLXZvaWQg
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0
MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLmVlZDMxOGU4YzM1YjBjN2U2ZTE2
MmY2M2JlYmMwZDJmNGJiMGRiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0yMywyMiArMjMsMjEgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxG
RUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUp
OwogCiBwcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVCbGVuZCI7IH0KKyAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1BcHBs
eUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
Y1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CiAgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCkBAIC00Niwx
MCArNDUsOSBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBGRUJsZW5kKEZpbHRlciYsIEJsZW5kTW9kZSk7Ci0KICAgICBCbGVuZE1v
ZGUgbV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVCbGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4
IDE2NDIyZDZkYzViNTdlYzZmNzQ3YTQyMTBjMjg1NDMzMmJhMWQzZTUuLmI2NjRmMjllNjQ5MWE4
OWZmMzc3OTIxZTJjMmZhOTZhMjc4MTI1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMzUs
MTYgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb2xvck1hdHJpeDo6RkVD
b2xvck1hdHJpeChGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3Rvcjxm
bG9hdD4mJiB2YWx1ZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb2xvck1h
dHJpeCkKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIHR5cGUs
IFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUNvbG9yTWF0cml4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3ZhbHVl
cyhXVEZNb3ZlKHZhbHVlcykpCiB7CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8
ZmxvYXQ+JiYgdmFsdWVzKQorUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0
ZShDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlwZSwgV1RGTW92ZSh2
YWx1ZXMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBX
VEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRUeXBlKENvbG9y
TWF0cml4VHlwZSB0eXBlKQpAQCAtMjczLDExICsyNzMsMTEgQEAgdm9pZCBlZmZlY3RUeXBlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMs
IEludFMKICAgICB9CiB9CiAKLXZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK3ZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAy
OWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi4yMjlmZjBiOGM0NGY1MWMw
ZWYwNTRlNWVhMmE0MjQ2ZTIyN2Q4N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMjIsOCArMjIs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsNyArMzYsNyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZF
Q29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhU
eXBlKTsKQEAgLTUwLDExICs0OCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhU
eXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQorICAgIEZFQ29sb3JNYXRyaXgo
Q29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwogCkBAIC05Myw3ICs4OSw0IEBAIGlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19G
SUxURVJfRUZGRUNUKEZFQ29sb3JNYXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAppbmRleCA4NDdlYTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi44OGU1OWY1
MDg5NGU3ZDRmMDdmYWIxOWY0ZTQzZjg2YzM3ZjNjOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAKQEAgLTMzLDkgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGFscGhhRnVuY3Rpb24pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpD
b21wb25lbnRUcmFuc2ZlcikKK0ZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNm
ZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jdGlvbikKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCiAgICAgLCBtX3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9u
KQogICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVuY3Rpb24pCiAgICAgLCBtX2JsdWVGdW5j
dGlvbihibHVlRnVuY3Rpb24pCkBAIC00MywxMCArNDIsMTAgQEAgRkVDb21wb25lbnRUcmFuc2Zl
cjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgcmVkRnVuY3Rpb24sCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFu
c2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9u
LAogICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVu
Y3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJs
dWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwogfQogCiB2b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpCkBAIC0xMDQsMTEgKzEwMywxMSBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBv
bmVudAogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnBy
ZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTIxLDcgKzEyMCw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJl
ZFRhYmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAg
ICBpbi0+Y29weVVucHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAg
ICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVs
QXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uNmFmZWU1
ZTk2ODYxNzEzNzQxZTM5OWE2OGI1MWYzOTQwODNmMDQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRl
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Yyk7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWRGdW5jdGlvbjsgfQogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
Z3JlZW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JlZW5GdW5jdGlvbjsgfQpAQCAtNjIs
MTAgKzU5LDcgQEAgcHVibGljOgogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jdGlvbjsgfQogCiBwcml2YXRlOgot
ICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5G
dW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Yyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQorICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBi
bHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAog
ICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwogCkBAIC03
Nyw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9v
a3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUm
IGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCkBAIC04OSw2ICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlw
ZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklM
VEVSX0VGRkVDVChGRUNvbXBvbmVudFRyYW5zZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCA4MzM1
MzA5MDgxYTI2YmEyYzMxYzNiZGFjODg4NjY5ZTI4ZTM0NTZkLi4yYjg3OTI0MGUxY2I4NmUwYjg4
OGUxM2I4NjM2MzZjZWYzMGJmZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMzIsOCArMzIsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEs
IGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpDb21wb3NpdGUpCitGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvc2l0
ZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9rMShrMSkKICAgICAsIG1fazIoazIpCkBA
IC00Miw5ICs0Miw5IEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9CiAKLVJlZjxGRUNv
bXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUoZmlsdGVyLCB0
eXBlLCBrMSwgazIsIGszLCBrNCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9z
aXRlKHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCkBAIC04NywxNCArODcsNiBAQCBi
b29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBp
ZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCiBz
dGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hh
ciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAg
LTIwMSw3ICsxOTMsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdQogI2VuZGlmCiB9CiAKLXZv
aWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVDb21w
b3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9J
TjoKQEAgLTIxOCwyNSArMjEwLDI1IEBAIHZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8v
IFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZm
ZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgICAgICBGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lk
IEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICAgICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZm
ZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBhdXRvIHNv
dXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgICAgIGlmICghc291cmNlUGl4ZWxB
cnJheSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjQ3LDcgKzIzOSw3IEBAIHZvaWQgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgK
aW5kZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uMTQzNThkYzNj
ZjZjMWZkOWNlY2FjNzJlZDk1MjkxOGE2ZTU4MmQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMjIsOCAr
MjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00MSw3ICszOSw3IEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSB7CiAKIGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAg
c3RhdGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKICAgICBDb21wb3NpdGVPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUpOwpAQCAtNTgsMTggKzU2LDEzIEBAIHB1
YmxpYzoKICAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJuIG1fazQ7IH0KICAgICBib29sIHNl
dEs0KGZsb2F0KTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQotCiBwcml2YXRlOgotICAgIEZFQ29tcG9zaXRlKEZpbHRlciYs
IGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9zaXRlIjsgfQorICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKLSAgICB2b2lkIGNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQ
cmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKQEAgLTkwLDMgKzgz
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb3NpdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAppbmRleCAzYmJlNzgzNTk4ZDcwOTM1YTk1YzZmMTU2ZWMyOTMzYzBlOTlmMDUwLi42ODE3
NDRlYTQyNDBlOTE0NWRjYzljNThiMjY1NzZmOTFkYzg1YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAKQEAgLTMyLDEwICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVD
b252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50
U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJ
bnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3Qg
RmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpDb252b2x2ZU1hdHJpeCkKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29u
c3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgpCiAgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKICAgICAsIG1fZGl2aXNvcihkaXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCkBAIC00OSwx
MSArNDcsOSBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmls
dGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VSVChtX2tlcm5lbFNpemUu
aGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAg
ICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCitSZWY8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0
IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxv
YXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVD
b252b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9m
ZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZz
ZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhhLCBr
ZXJuZWxNYXRyaXgpKTsKIH0KIApAQCAtMzY3LDExICszNjMsMTEgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLAogICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwg
eDEsIHkxLCB4MiwgeTIpOwogfQogCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEg
PyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2
ZUFscGhhID8gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCkgOiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAg
LTM4MSwxNSArMzc3LDE0IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKIAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJh
eTsKICAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0g
aW4tPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRVbnByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAg
ZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJj
ZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkp
OwotCisgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNv
dXJjZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2Ri
YS4uOTU3NmRmZWU3ZTg0MmNhZjQ2NTA4NWFkNzFiYzcwZTJmNWFhZjU5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDkgKzM3LDcgQEAg
ZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQs
IGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAg
ICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29u
dm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZp
c29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5
cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBo
YSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIEludFNpemUga2Vy
bmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAgIHZvaWQgc2V0S2Vy
bmVsU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC03NywxNCArNzQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7CiAgICAgfTsKIAotICAgIEZFQ29udm9s
dmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9v
bCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50
U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9p
bnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxV
bml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5l
bE1hdHJpeCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFQ29udm9sdmVNYXRyaXgiOyB9CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIApAQCAtMTE1LDMgKzEwOSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29udm9s
dmVNYXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IGVlYjE3MjhkYjM1ZThh
YzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmY3NmNlMmNlOTY0M2VmZGY2Y2UyNTZlOTU0NzM3
OGE0MDdkMTM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0yNywxOCArMjcs
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6RkVEaWZm
dXNlTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGln
aHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdo
dGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6
RGlmZnVzZUxpZ2h0aW5nKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKERp
ZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3Rh
bnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShs
aWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7CiB9
CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxG
RURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
RGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZm
dXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdo
dGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVs
VW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwog
fQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0Owot
CiBib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVz
ZUNvbnN0YW50KQogewogICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3Rh
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQy
NjE1ZTQ3NTEzYTBkZGRjMy4uOGExMGFlYzg3YzhmMTg5ZjlmMDU3Y2I5NDQzZWFhZWRkNTM4ZjY5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMjksOCArMjksNyBAQCBjbGFzcyBMaWdo
dFNvdXJjZTsKIAogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRl
ciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNv
dXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKKyAgICBzdGF0aWMg
UmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3Is
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7
CiAKICAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VD
b25zdGFudDsgfQogICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKQEAgLTM4LDgg
KzM3LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9y
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAg
RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVD
VChGRURpZmZ1c2VMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3
NDkzMzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uNjU2NjNkOTI5NjdlYTZmN2Yw
YmFjYzM1YzE3ZTNmYzAxMDM1YWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAg
LTMxLDE4ICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlzcGxhY2VtZW50
TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RGlzcGxhY2Vt
ZW50TWFwKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFRGlzcGxhY2VtZW50TWFwKQogICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVs
U2VsZWN0b3IpCiAgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKICAg
ICAsIG1fc2NhbGUoc2NhbGUpCiB7CiB9CiAKLVJlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNw
bGFjZW1lbnRNYXA6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4
Q2hhbm5lbFNlbGVjdG9yLAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
ciwgZmxvYXQgc2NhbGUpCitSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3Rvciwg
eUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURp
c3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkp
OwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcikKQEAgLTkxLDcgKzkwLDcgQEAg
c3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNp
Z25lZCB5LCB1bnNpZ25lZCByb3dCeXQKICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5
ICogcm93Qnl0ZXM7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CkBAIC05OSwy
OSArOTgsMjcgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAg
ICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRS
ZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2lu
Z1JlY3QpOworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9t
IOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZh
bHVlcy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1
bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4y
LT5nZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKICAg
ICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQogICAgICAgICByZXR1cm47
CiAKICAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2Ut
Pmxlbmd0aCgpKTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAg
SW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWlu
dFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCi0gICAgRmxvYXRTaXplIHNjYWxl
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7
CisgICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3Nj
YWxlLCBtX3NjYWxlIH0pOwogICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgo
KSAvIDI1NS4wOwogICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAy
NTUuMDsKICAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAu
NTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2
ODE5ZTY3NTE2MjNhM2EyLi42ZWU2OGIxMDhkYjczYjA3MDRmZmVkOWM1MTBiNDIzYTFjNzVhZGU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
Nyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxh
Y2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBm
bG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7IH0K
ICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7
CkBAIC01MiwxMyArNTEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgot
ICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7
CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVj
dG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVE
aXNwbGFjZW1lbnRNYXAiOyB9CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQorICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9CiAKICAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
eENoYW5uZWxTZWxlY3RvciAtIDE7IH0KICAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KQEAgLTcyLDMgKzY5LDQgQEAgcHJpdmF0
ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJ
TFRFUl9FRkZFQ1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMzVm
YmFiNDFlODA5MjE2ZTRiMjI0MzUxMTg2MjNlMjhmZmQ2MWVmYS4uNmE5NmNhOTkwOTFhYWFjYzNi
M2QwYmUyYWVlOTUyMzQ5YWIyYjYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMzEsOCArMzEs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1GRURyb3BTaGFkb3c6OkZFRHJvcFNo
YWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEcm9wU2hhZG93KQorRkVEcm9wU2hhZG93
OjpGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURyb3BTaGFkb3cpCiAgICAgLCBtX3N0
ZFgoc3RkWCkKICAgICAsIG1fc3RkWShzdGRZKQogICAgICwgbV9keChkeCkKQEAgLTQyLDE4ICs0
MiwxNiBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQg
c3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1SZWY8RkVEcm9wU2hhZG93
PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQg
c3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0
IHNoYWRvd09wYWNpdHkpCitSZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShm
bG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9y
LCBzaGFkb3dPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93
KHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRvd09wYWNpdHkpKTsKIH0KIAot
dm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVE
cm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCiAgICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CiAgICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBhYnNvbHV0ZU9mZnNldFBhaW50
UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KSk7CiAg
ICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwogCiAg
ICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNp
emUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwpAQCAtNzAsMTkgKzY4LDE2IEBAIHZvaWQg
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7
Ci0gICAgCi0gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGJsdXJSYWRpdXMuc2NhbGUo
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KTsKKyAgICBGbG9hdFNpemUgYmx1
clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fc3RkWCwgbV9zdGRZ
IH0pOworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7
IG1fZHgsIG1fZHkgfSk7CiAKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmlu
ZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLjE3NzA1NmJiY2Y4
ODNlNjRiZDE0ZTFjNGY4NWI3NGRmNjczZmM0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMjAsMTQg
KzIwLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKIGNsYXNzIEZFRHJvcFNoYWRvdyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0YXRpYyBS
ZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgs
IGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkp
OwogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQog
ICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGRYKSB7IG1fc3RkWCA9IHN0ZFg7IH0K
QEAgLTQ4LDEzICs0NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFjaXR5KGZs
b2F0IHNoYWRvd09wYWNpdHkpIHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0eTsgfQog
CiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0
ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQorICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTcwLDMgKzY3LDQgQEAgcHJpdmF0ZToKICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFRHJvcFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5
MjM4MGYzYjZiMDEuLmM1NzBkOWM1NWVmNjUzMTY0ODBkNWNlODliYTcyNTQyN2ViNjdhZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVG
bG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZs
b2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29k
KQorRkVGbG9vZDo6RkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RP
cGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZCkK
ICAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQogICAgICwgbV9mbG9vZE9wYWNpdHkoZmxv
b2RPcGFjaXR5KQogewogfQogCi1SZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorUmVm
PEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQg
Zmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVy
LCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUZsb29kKGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwogfQogCiBib29sIEZFRmxvb2Q6OnNl
dEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNTgsOSArNTgsOSBAQCBib29sIEZF
Rmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNl
YjBhZDhiMjQ2ODJmYTA2MTczNDhlLi5hMjA3ODE5MmU2Njg2NWQ3MjhkNGFlNDczMzRhYjE0OGNi
MTRkODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuaApAQCAtMjIsMTQgKzIyLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRl
ciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRl
KGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCiAgICAgY29u
c3QgQ29sb3ImIGZsb29kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kQ29sb3I7IH0KICAg
ICBib29sIHNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTQ1LDEzICs0NCwxMSBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOworICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0
IGZsb29kT3BhY2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFRmxvb2QiOyB9CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtNjEsMyArNTgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUZsb29kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcAppbmRleCAwZjZlZTg3Zjk1ZTc1NzUxODYzZmQyZTVmNTQ5ZTc0ZDk3
MjlkYjFmLi4xMzZmNjhhYWY3N2Q4YjI1MDNiYmRmNmY0ZDhlOGI1ODhiMTE3MTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcApAQCAtNzksMTcgKzc5LDE3IEBAIGlubGluZSB2b2lkIGtlcm5lbFBv
c2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVm
dCwKICAgICB9CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZp
bHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZF
R2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAg
ICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQogICAg
ICwgbV9zdGRYKHgpCiAgICAgLCBtX3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUp
CiB7CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorUmVm
PEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdh
dXNzaWFuQmx1cihmaWx0ZXIsIHgsIHksIGVkZ2VNb2RlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKIH0KIAogdm9pZCBGRUdhdXNz
aWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQpAQCAtNDg1LDcgKzQ4NSw3IEBAIElu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQogCiBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJu
ZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogewot
ICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwog
fQogCiBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6
ZSBzdGREZXZpYXRpb24pCkBAIC00OTYsOSArNDk2LDkgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVy
biB7IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAv
IDIgfTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKQordm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBJbnRTaXplIGtl
cm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9
KTsKIAogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5h
YnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScg
ZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCkBAIC01MTksMTEgKzUxOSwx
MSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVj
dCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
dm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVk
UmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm47CiAKQEAgLTUzNiwxMSArNTM2LDkgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRl
cigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCku
ZmlsdGVyU2NhbGUoKSk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6
ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0
ZXIoKS5maWx0ZXJTY2FsZSgpKTsKICAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKICAg
ICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmlu
ZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmViMjgzYmVhYWExNzY0N2NiYjJkM2UuLjc2OTYyM2FmYTU0
MmMwZDg2MjVhZGRhMDU5MjUwZjU4NWUwNTNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIy
LDE0ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVHYXVzc2lhbkJsdXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUo
RmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBSZWY8RkVH
YXVzc2lhbkJsdXI+IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCiAg
ICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQogICAgIHZv
aWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CkBAIC00NSw5ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pOwogCiBwcml2YXRlOgotICAgIEZFR2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9h
dCwgRWRnZU1vZGVUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9CisgICAgRkVHYXVzc2lhbkJsdXIoZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
aW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKIApAQCAtNjQsOSArNjEsOSBAQCBwcml2YXRlOgogICAgICAgICB1
bnNpZ25lZCBrZXJuZWxTaXplWTsKICAgICB9OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKQEAgLTgzLDMgKzgwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVHYXVzc2lhbkJsdXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcAppbmRleCA2NTliMTA1NWY2MWVhYWJjNWYyOTk5MWRhMGRhMWE1ODUwNzFh
ZTkyLi5mYmQ1MDM5MDJiY2M1OGVmNTM0Zjg1YTk5MTBjNGM3YWI3MDVjMzgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKQEAgLTM1LDggKzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBl
LCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCB0eXBlKQorRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUg
bGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCisg
ICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkKICAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlw
ZSkKICAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiAgICAgLCBtX2xp
Z2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKQEAgLTQ3MSwxMSArNDcxLDExIEBAIGJvb2wgRkVM
aWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0
aCwgaW50IGhlaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
cHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IGIwYmI3MGExNGQxNzQ5NTA2NzM3ZTg4
ZTA1MTRlZTc5NjgyMGE0NDkuLmQ4NTJmOGIxM2RkNzk3ZjhlODk5MzUxZjhiNThkMzU4NWEwM2Yz
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9G
b3J3YXJkLmg+CkBAIC00MCw3ICszOSw3IEBAIHN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRh
Rm9yTmVvbjsKIAogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQogCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CkBAIC0xMjgsMTYg
KzEyNywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7CiAgICAgc3RhdGljIHZv
aWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24q
KTsKIAotICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJj
ZT4mJiwgVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFTGlnaHRpbmciOyB9CisgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8
TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwogCiAgICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFt
cGVkQXJyYXkmLCBpbnQsIGludCk7CiAKICAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVj
dG9yKTsKICAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRp
bmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0
IGFscGhhKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAwYTIwMDAxYjE3M2JkOGZkZjZi
YmE2MzZjZDIzY2U0NzAyNmU3YjNmLi5mYmY1MDM5MDlmYzhmOGEzZGFhZGU1NjkwMzA5N2IxNGNk
NWFmNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKQEAgLTI4LDIyICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK0ZFTWVyZ2U6OkZFTWVyZ2UoKQorICAgIDogRmlsdGVy
RWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVNZXJnZSkKIHsKIH0KIAotUmVmPEZFTWVyZ2U+
IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpj
cmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoZmlsdGVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZSgpKTsKIH0KIAotdm9pZCBGRU1lcmdlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKIHsKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGVi
Y2YxOGYyNjA3Li4wNTE5YTU2ODhhODM2M2ZjMWJhMDYzMjA0ZGIyMmY3NDMxYWUzNGYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aApAQCAtMjIsMjMgKzIyLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNy
ZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFTWVyZ2UoRmlsdGVyJik7CisgICAgRkVNZXJnZSgp
OwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RU1lcmdlIjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVNZXJnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA2YWUzZDk4OTg2NjI2ZTA3YzA5NGM1ODZm
MzE5OGM5YzU4ZGFlZDZiLi41Zjc0Y2ZkNzRmYjhmOTg1NDM5NmI3NTdhNGFjMjBkYjRiNjE4NzM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0zNSwxNyArMzUsMTcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKK0ZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTW9ycGhvbG9neSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9yYWRpdXNYKHJhZGl1
c1gpCiAgICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKIHsKIH0KIAotUmVmPEZFTW9ycGhvbG9neT4g
RkVNb3JwaG9sb2d5OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+
IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1v
cnBob2xvZ3koZmlsdGVyLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAog
Ym9vbCBGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCkBAIC03MiwxMSArNzIsMTAgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJh
ZGl1c1koZmxvYXQgcmFkaXVzWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBo
b2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVNb3JwaG9sb2d5Ojpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBG
bG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5m
bGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1
c1kgfSkpOworICAgIHBhaW50UmVjdC5pbmZsYXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCiAg
ICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKICAgICBlbHNlCkBA
IC0yNDAsMTEgKzIzOSwxMSBAQCBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2
b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKQEAgLTI1OCwxMiArMjU3LDExIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0
ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNv
dXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAg
cmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAgICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwogICAgIGludCByYWRpdXNZ
ID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0
KCkpOwogCkBAIC0yNzMsMTAgKzI3MSwxMCBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0
RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRp
bmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVj
dC53aWR0aCgpKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVz
WCk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKIAogICAgIHBs
YXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQx
MTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLmFlODE1MTU0Y2VhZGFlZWQzMjZhNDQ5
Mzg3MWNmM2U4OTcwZGZiYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMjIsNyArMjIsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3ICszMyw3IEBAIGVudW0gTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmls
dGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CisgICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAgICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7
CkBAIC00NiwxMyArNDUsMTEgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7
CiAKIHByaXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3Jw
aG9sb2d5IjsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg2LDMgKzgz
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVNb3JwaG9sb2d5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcw
ZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li4wNjUwMDFlMDBiNThmYzg1MDMz
MDEzN2M4YmQ3MTMxNTZmOTdiMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVy
LCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpP
ZmZzZXQpCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDogRmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVPZmZzZXQpCiAgICAgLCBtX2R4KGR4KQog
ICAgICwgbV9keShkeSkKIHsKIH0KIAotUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCitSZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0
OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFT2Zmc2V0KGZpbHRlciwgZHgsIGR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVP
ZmZzZXQoZHgsIGR5KSk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQpAQCAt
NTIsMTEgKzUyLDEwIEBAIHZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQogICAgIG1fZHkg
PSBkeTsKIH0KIAotdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQor
dm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOworICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9keCwgbV9keSB9KSk7CiAgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKICAgICAgICAgcGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwogICAgIGVsc2UKQEAgLTY0LDExICs2
MywxMSBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAot
dm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVPZmZzZXQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0g
aW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTc2LDggKzc1LDcgQEAgdm9pZCBGRU9mZnNldDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworICAgIGRyYXdpbmdSZWdpb24ubW92ZShm
aWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaAppbmRleCA2NWFiZGE5MGE0N2IxYmZlNzZhZTVjNzRhYWI1YWExNjdmYjFlNjll
Li5kM2VjOTVhZGRmMTM0N2I1M2VlMDQ4N2M0MGFkYjE5MDFhZTQ0N2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCkBAIC0y
MiwxMyArMjIsMTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVP
ZmZzZXQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
T2Zmc2V0PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBzdGF0aWMg
UmVmPEZFT2Zmc2V0PiBjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgIGZsb2F0IGR4
KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQogICAgIHZvaWQgc2V0RHgoZmxvYXQpOwpAQCAtMzcs
MTMgKzM2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldER5KGZsb2F0KTsKIAogcHJpdmF0ZToK
LSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0
KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwogCkBAIC01MywzICs1MCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFT2Zmc2V0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJi
NWI3MTQxZjc0ZjljNDg3YTE0NGMuLjM4NzA3YjMwMWZkMTEwYmVjYmIwNGUyNWNmYzk4MmEyMDVm
ZTY0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTI3LDE4ICsyNywxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVy
LCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcp
CitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKKyAgICA6IEZF
TGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFU3BlY3VsYXJMaWdodGluZykKIHsKIH0KIAotUmVmPEZFU3BlY3VsYXJMaWdodGluZz4g
RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBs
aWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorUmVmPEZF
U3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKSA9
IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3VsYXJDb25zdGFudCA9
PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3
NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uYWM0NTBkYmRiNjBjZDY5N2NkOGRm
YzNjNzkzMThkYmY2NGFkNTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yNyw4
ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0aW5n
IDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxh
ckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVT
cGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNy
ZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7
CiAKICAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxh
ckNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKQEAgLTM5
LDggKzM4LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25zdCBD
b2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3Is
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVTcGVjdWxhckxpZ2h0aW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNhYzIwYWQuLmU3
NGE3OGM5ZTIxNjkwMWE5NWVhZDFiNTllNmVmYTk1ZDkwNDFjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTMxLDIy
ICszMSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRl
ciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK0ZFVGls
ZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGls
ZSkKIHsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitS
ZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVUaWxlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0K
IAotdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogLy8gRklYTUU6IFNl
ZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZSBmYWls
dXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTU4LDEzICs1OCwxMiBAQCB2b2lkIEZFVGlsZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0
UmVjdCgpOwogICAgIEZsb2F0UG9pbnQgaW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0Lmxv
Y2F0aW9uKCk7CiAgICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJl
Y3QoKS5sb2NhdGlvbigpOwotICAgIGlmIChpbi0+ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRl
ckVmZmVjdFR5cGVTb3VyY2VJbnB1dCkgewotICAgICAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOworICAgIGlmIChpbi0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlR3JhcGhpYyB8fCBpbi0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlQWxwaGEpIHsKICAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9u
KCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CisgICAgICAgIHRpbGVS
ZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICB9CiAKLSAgICBhdXRvIHRpbGVJ
bWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0
aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIGZpbHRlcigpLnJlbmRlcmlu
Z01vZGUoKSk7CisgICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsKICAgICBpZiAoIXRpbGVJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaAppbmRleCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQw
Njg3NzE0Li5lZDc2OTUxZmI1YjQzMWQ1MzcyYzRkM2VlYTU4NTc1MDUzZmNkMTI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAg
LTIyLDI3ICsyMiwyMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xh
c3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRl
KCk7CiAKIHByaXZhdGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUi
OyB9CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQotCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
aW5kZXggNzc0ZTY4MmUzYjQ4NTliYjZlMjA2YTFkMmJmYWViMGNlYTkxOWYwYi4uZDgyNTMxNjE3
NDNjNTZhYWE1NzVmNTI5N2RlMTczMWVjMzA0NTNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAt
NDgsOCArNDgsOCBAQCBzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAv
LyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCiBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAx
Mjc3NzM7IC8vIG0gLyBhCiBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUg
YQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5j
ZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBp
bnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCitGRVR1cmJ1bGVuY2U6OkZFVHVyYnVs
ZW5jZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJidWxlbmNlKQog
ICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lY
KQogICAgICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKQEAgLTU5LDkgKzU5LDkg
QEAgRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VU
eXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZFVHVyYnVsZW5jZT4gRkVU
dXJidWxlbmNlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZs
b2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMs
IGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1
bGVuY2U6OmNyZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0
aXRjaFRpbGVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0
ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2Vl
ZCwgc3RpdGNoVGlsZXMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2Uo
dHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBz
dGl0Y2hUaWxlcykpOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNl
VHlwZSB0eXBlKQpAQCAtMzY2LDIyICszNjYsMjEgQEAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QK
ICAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQpOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRj
aERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Cit2b2lkIEZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlciwgVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hE
YXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAogewogICAgIEFTU0VS
VChlbmRZID4gc3RhcnRZKTsKIAogICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUo
KSk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsK
ICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lk
dGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRl
cigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9y
bSgpKTsKKyAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZpbHRlclNj
YWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CiAKICAg
ICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAgICAgICAgIHBvaW50LnNl
dFkocG9pbnQueSgpICsgMSk7CiAgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkg
ewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwor
ICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VT
Y2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgYXV0byB2
YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEsIGxvY2FsUG9pbnQpOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2
YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwogICAgICAg
ICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwpAQCAtMzkxLDE5ICszOTAsMTggQEAgdm9p
ZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IFBhaW50aW5nRGF0YSYKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3Jr
ZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVycy0+
ZmlsdGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+
cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFks
IHBhcmFtZXRlcnMtPmVuZFkpOworICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMt
PnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZ
LCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IHVucHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50U2l6
ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICByZXN1bHRTaXpl
LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwpAQCAt
NDQwLDcgKzQzOCw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVs
Sm9icy5wYXJhbWV0ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7
CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9ICZmaWx0ZXI7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLmVmZmVjdCA9IHRoaXM7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJy
YXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWlu
dGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hE
YXRhID0gc3RpdGNoRGF0YTsKQEAgLTQ1Nyw3ICs0NTYsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBzaW5n
bGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3Ig
dGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxSZWdpb24oZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgZmls
bFJlZ2lvbihmaWx0ZXIsIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCAwLCBoZWlnaHQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRk
NTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjVlNTUwZDlkNmI0MDRiNjA1
ZmE5MTU0MTkxYzMwMDQyZGQxYmQ5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtMjYsNyArMjYsNiBA
QAogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgs
NyArMzcsNyBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxl
bmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1
cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBp
bnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1
cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIFR1
cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNl
dFR5cGUoVHVyYnVsZW5jZVR5cGUpOwpAQCAtOTYsNyArOTUsOCBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7CiAKICAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRl
cnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKKyAgICAgICAgY29uc3QgRmlsdGVy
KiBmaWx0ZXI7CisgICAgICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwogICAgICAgICBVaW50OENs
YW1wZWRBcnJheSogcGl4ZWxBcnJheTsKICAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0Rh
dGE7CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKQEAgLTEwNiwxOSArMTA2LDE3IEBA
IHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25Q
YXJhbWV0ZXJzKik7CiAKLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1
bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGlu
dCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNlIjsg
fQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29s
dXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5pdFBhaW50
KFBhaW50aW5nRGF0YSYpOwogICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50
aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQ
YWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7Cisg
ICAgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29u
c3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0
OwogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CiAKQEAgLTEzMiwz
ICsxMzAsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRVR1cmJ1bGVuY2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCBhMmQ5OTc5
M2IwZGIyMjU4YmM0NzZkZGNjMjljMGNlMjYxMTBiYzFmLi5mMzVkOWJhNDJmZmIwY2EyZTBjNWI4
Y2VjZjNkNjFkMmM3YTAxNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjEsNTggKzIyLDU3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbHRlcj4geworY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1Ymxp
YzoKLSAgICBGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
ZmxvYXQgZmlsdGVyU2NhbGUgPSAxKQotICAgICAgICA6IG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJz
b2x1dGVUcmFuc2Zvcm0pCi0gICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKLSAg
ICB7IH0KLSAgICB2aXJ0dWFsIH5GaWx0ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2b2lkIHNldFNv
dXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUlt
YWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9CisgICAgRmxvYXRTaXplIGZpbHRl
clNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQorICAgIHZvaWQgc2V0Rmls
dGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0g
ZmlsdGVyU2NhbGU7IH0KIAotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0
aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRp
b24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisgICAgdm9pZCBzZXRGaWx0ZXJS
ZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBm
aWx0ZXJSZWdpb247IH0KKyAgICAKKyAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkgeyBtX3NvdXJjZUltYWdlUmVjdCA9IHNv
dXJjZUltYWdlUmVjdDsgfQogCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclNjYWxlOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkg
eyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7IH0KKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2FsZWRC
eUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0
ZXJTY2FsZTsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbHRlcigpIHsgfQogCi0gICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWJzb2x1dGVUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJ
bWFnZSk7IH0KKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUltYWdlLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICB2b2lkIHNldFJlbmRlcmlu
Z01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJl
bmRlcmluZ01vZGU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVz
b2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25z
dCA9IDA7Ci0KIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJS
ZXNvbHV0aW9uKQorICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSkKKyAgICAgICAgOiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBl
KQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCisgICAgeworICAgIH0KKwor
ICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0
ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uKQorICAgICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCisg
ICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAgICAgLCBtX3NvdXJjZUlt
YWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CisgICAgRmxvYXRTaXplIG1fZmlsdGVy
U2NhbGU7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBt
X2ZpbHRlclJlZ2lvbjsKKwogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsK
LSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFmZmluZVRyYW5zZm9ybSBt
X2Fic29sdXRlVHJhbnNmb3JtOwogICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUg
eyAxIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5k
ZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5MjdkYjEwOC4uZTMzMzBhMWY0NjQ1
MjhkYTczMmZkYjYyOGUyMDMwN2ZjMWE4NGExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjcs
NyArMjcsNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgpAQCAtMzUsMjUgKzM0LDE0IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24u
aD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9maWx0
ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKK0ZpbHRlckVm
ZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKQorICAgIDogRmlsdGVy
RnVuY3Rpb24odHlwZSkKIHsKIH0KIAotRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkgPSBk
ZWZhdWx0OwotCi12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKICAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQpAQCAtOTYsMjIgKzg0LDIyIEBAIEZsb2F0
UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVj
dCYgc3JjUmVjdCkgY29uc3QKICAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7
CiB9CiAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgLy8gRkVUaWxlLCBGRVR1
cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0
ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCiAgICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKICAgICBp
ZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkp
IHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOworICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAg
ICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgICAgICAgICAgYXV0byBpbnB1dFBy
aW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oZmlsdGVyKTsKICAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVn
aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICAgICAgc3VicmVn
aW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogCiAgICAgLy8gQWZ0ZXIgY2FsbGluZyBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3QsIHJlc2V0
IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAgIGlmIChmaWx0ZXJFZmZlY3RU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmls
dGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7CisgICAgaWYgKGZpbHRlclR5cGUoKSA9PSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkKKyAgICAgICAgc3VicmVnaW9uID0gZmlsdGVyLmZp
bHRlclJlZ2lvbigpOwogCiAgICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygp
OwogICAgIGlmIChoYXNYKCkpCkBAIC0xMjUsMTUgKzExMywxNCBAQCBGbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogCiAgICAgc2V0Rmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7CiAKLSAgICBhdXRvIGFic29sdXRlU3Vi
cmVnaW9uID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7
Ci0gICAgYXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigp
OwotICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOworICAgIGF1
dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBzdWJyZWdpb247CisgICAgYWJzb2x1dGVTdWJyZWdpb24u
c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIC8vIFNhdmUgdGhpcyBiZWZvcmUgY2xp
cHBpbmcgc28gd2UgY2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9pbnRzIGZyb20gdXNlciBz
cGFjZSB0byBidWZmZXIgY29vcmRpbmF0ZXMuCiAgICAgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJy
ZWdpb24oYWJzb2x1dGVTdWJyZWdpb24pOwogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZm
ZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJS
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRl
clJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOworICAgIGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBhYnNvbHV0ZVN1
YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCiAgICAgc2V0
TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7CkBAIC0xNjMsMTQgKzE1MCwxNCBAQCB1
bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdAog
ICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3RzKTsKIH0KIAotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKK3ZvaWQgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1f
aW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKKyAgICAgICAg
aW4tPmFwcGx5KGZpbHRlcik7CiAgICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xNzgsNDgyICsxNjUsMTA1IEBAIHZvaWQgRmlsdGVyRWZmZWN0
OjphcHBseSgpCiAgICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwogICAg
IH0KIAotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoZmlsdGVyKTsKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBs
eSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMg
PDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWlu
dFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAg
ZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciBy
ZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJp
ZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBh
aW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIg
PDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwogCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7
CisgICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgICAgICBpbi0+Y29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgIH0KLSAgICAKKworICAgIGlm
ICghY3JlYXRlUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEFkZCBwbGF0Zm9y
bSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRl
cik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cygpCitib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KCkKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdl
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1h
Z2U7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7Ci0gICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVs
bG9wdDsKKyAgICBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiB7CiAgICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMs
IHJlZ2FyZGxlc3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCiAgICAgLy8gYSByZXN1bHQu
IENhbiBiZSB1c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBjbGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQg
c2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCk7CisgICAgY2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3Vs
dCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpOwotCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIu
cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVs
QnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5pbWFnZUJ1
ZmZlcigpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5t
dWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorUGl4ZWxCdWZmZXIqIEZpbHRlckVmZmVjdDo6
dW5wcmVtdWx0aXBsaWVkUmVzdWx0KCkKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxl
ZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisg
ICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVu
bXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0
dXJuIHBpeGVsQXJyYXk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CiB9CiAKLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNw
YWNlKQorUGl4ZWxCdWZmZXIqIEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7
Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5z
Y2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2Nh
bGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVs
QXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2Vk
QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFy
cmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgc2NhbGVkUmVj
dC5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVz
dGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5
IHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0Lnko
KSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBz
Y2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVt
c2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAg
Ly8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBz
b3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBz
Y2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0g
MDsKLSAgICBpZiAoeE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAg
ICAgICAgeE9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhY
KCk7Ci0gICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVu
ZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRS
ZWN0LnkoKTsKLSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAg
ICAgICB5RGVzdCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAg
aW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsK
LQotICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0
aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2Fu
bGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lk
dGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291
cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmln
aW4pICogNDsKLQotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlv
blBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNv
dXJjZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6
ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBk
ZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwot
Ci0gICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
Q29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBv
bmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0g
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9p
ZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRT
aXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAg
IGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7
Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQg
PSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVu
dCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
LSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2Vu
ZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFy
Z2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1F
OiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0
IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIGRl
c3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9u
UmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNv
bWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29u
dmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRl
c3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAgIHJl
dHVybiBtX2ZpbHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKTsKIH0KIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQp
CitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25l
IG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsK
LQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNw
YWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAg
YXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBDb2xvciBzcGFjZSBjb252
ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVm
ZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9y
U3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHJlY3QpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVy
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCitSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3Vs
dChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkKIHsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV9p
bWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZl
cnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3Bh
Y2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVm
ZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQoVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKIHsKLSAgICAv
LyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9t
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwg
YW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0g
Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsK
LSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29w
eUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRl
c3RSZWN0KTsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIG1fZmlsdGVySW1hZ2UtPmNv
cHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAogewogICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVm
ZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNp
emUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAg
ICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1h
dCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAg
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZv
cm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVz
dGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9maWx0ZXJJ
bWFnZS0+Y29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRS
ZXN1bHRJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxz
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQg
JWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndp
ZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3Qg
JXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMp
OwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQo
IWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAg
IEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJl
c3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmls
dGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsK
LSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2Ug
bmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8g
V2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBp
cyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFu
aXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYm
IHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAg
ICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBu
b24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICBtX2ZpbHRlckltYWdlLT5jb3JyZWN0UHJlbXVsdGlwbGll
ZFBpeGVsQnVmZmVyKCk7CisgICAgCiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25D
b2xvclNwYWNlKQogewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNl
IGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29s
b3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25Db2xv
clNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFs
bHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBj
b2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBh
cnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5h
dGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpu
dWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0Owot
I2VuZGlmCisgICAgbV9maWx0ZXJJbWFnZS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSk7CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2Uy
Y2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLjQ5NzQyMThiZTA2M2Y3Mjc0YjAzZDEyOWJkM2YwNzU1NDgx
OTkwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjQsMTMgKzI0LDE0IEBACiAKICNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRSZWN0RXh0ZW50LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2LDY1ICs0NywzNiBAQCBjbGFzcyBJbWFnZUJ1ZmZl
cjsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZl
Y3RvcjsKIAotZW51bSBGaWx0ZXJFZmZlY3RUeXBlIHsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVW5r
bm93biwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2UsCi0gICAgRmlsdGVyRWZmZWN0VHlwZVRp
bGUsCi0gICAgRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0Ci19OwotCi1jbGFzcyBGaWx0ZXJF
ZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVm
ZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBU
eXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAg
ICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29u
dm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2Vt
ZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1
c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1l
cmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1
bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAg
IFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFs
IH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKKyAgICBib29sIGNy
ZWF0ZVJlc3VsdCgpOworICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKICAgICB2b2lk
IGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1
bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9
IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29w
eVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKKyAgICBQaXhlbEJ1ZmZlciogdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CisgICAg
UGl4ZWxCdWZmZXIqIHByZW11bHRpcGxpZWRSZXN1bHQoKTsKKworICAgIGJvb2wgaGFzUmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJJbWFnZTsgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJl
Y3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQp
OworCisgICAgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNv
bnN0OworCisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CisK
ICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRF
ZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lu
cHV0RWZmZWN0cy5zaXplKCk7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5w
dXRzKCkgY29uc3Q7CiAgICAgCi0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hl
Y2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3Qu
Ci0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLSAgICB9Ci0KICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIAogICAgIC8vIFJlY3Vy
c2VzIG9uIGlucHV0cy4KLSAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7CisgICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXImKTsKIAogICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVy
ZW50IGFscGhhIHZhbHVlcy4KICAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWxwaGFJbWFnZTsgfQpAQCAtMTE0LDIwICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBt
X2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KIAogICAgIEZsb2F0UmVj
dCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAg
dm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBt
X21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwor
ICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3Qp
IHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfQogCi0gICAgLy8gQ29ycmVjdCBh
bnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRl
ciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQg
cGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAg
Ly8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVy
Zm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQoKSB7IH0KKyAgICB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLSAgICB2aXJ0
dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0
cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKTsKIAogICAgIGVudW0gY2xhc3Mg
UmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAgICAgdmlydHVh
bCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBj
b25zdDsKQEAgLTE1NiwxMSArMTE5LDYgQEAgcHVibGljOgogICAgIAogICAgIEZsb2F0UG9pbnQg
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29uc3Q7CiAgICAgCi0g
ICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVm
ZmVjdENsYXNzVHlwZTsgfQotCi0gICAgRmlsdGVyJiBmaWx0ZXIoKSB7IHJldHVybiBtX2ZpbHRl
cjsgfQotICAgIGNvbnN0IEZpbHRlciYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7
IH0KLQogICAgIGJvb2wgY2xpcHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNUb0Jv
dW5kczsgfQogICAgIHZvaWQgc2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVlKSB7IG1fY2xpcHNU
b0JvdW5kcyA9IHZhbHVlOyB9CiAKQEAgLTE4MSw0MCArMTM5LDE4IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7CisgICAgRmls
dGVyRWZmZWN0KFR5cGUpOwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0
ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRo
Ci0gICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAs
IGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhl
bHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdl
LCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5
LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7CiAKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAg
IHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAg
dm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFy
cmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVy
JiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhlbEJ1ZmZlciYpOwotICAgIAorICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOwogCi0gICAgRmls
dGVyJiBtX2ZpbHRlcjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAK
LSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBS
ZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1
dGVQYWludFJlY3Q7CiAgICAgCkBAIC0yNDgsMTEgKzE4NCwxNyBAQCBwcml2YXRlOgogICAgIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSB9OwogI2VuZGlmCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
cmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0gICAg
Ci0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsKIH07CiAKIFdFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBGaWx0ZXJFZmZlY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVy
biBmdW5jdGlvbi5pc0ZpbHRlckVmZmVjdCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKENsYXNz
TmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUp
IFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpDbGFzc05hbWU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3
MTMyMmI3NWE3NTczZTljYzQuLjU5Y2Y3ZGZlMzQzNjExZmIxYTZmMjY1MmY2NjBiNmMwYjgxOTA1
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xh
c3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogICAgIAogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IHRyeUNyZWF0ZShib29sLCBGaWx0ZXJF
ZmZlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlFZmZlY3RzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVm
ZmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNWJiMTU2MzgxZGVjMWUwYmFjMjJkOTExOWMyZTBl
ZDgwZTRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlckZ1bmN0aW9u
OjpGaWx0ZXJGdW5jdGlvbihUeXBlIGZpbHRlclR5cGUpCisgICAgOiBtX2ZpbHRlclR5cGUoZmls
dGVyVHlwZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBhdXRvJiBmaWx0ZXJOYW1lcygp
Cit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9IEhhc2hNYXA8RmlsdGVyRnVuY3Rpb246OlR5
cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxGaWx0ZXJGdW5jdGlvbjo6VHlwZT4sIFdURjo6
U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVuY3Rpb246OlR5cGU+PjsKKworICAgIHN0YXRp
YyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAgICAgRmls
dGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJDU1NGaWx0ZXIiX3MgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsICAgICAgICAgICAi
U1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAgICAgICAgICAgICAiRkVCbGVuZCJfcyAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1h
dHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3MgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIsICJGRUNvbXBvbmVudFRyYW5z
ZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0
ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwgICAgIkZFQ29udm9sdmVNYXRyaXgi
X3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxp
Z2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJfcyAgIH0sCisgICAgICAgICAgICB7IEZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwgICAiRkVEaXNwbGFjZW1lbnRNYXAi
X3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hhZG93
LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAgICAgICAgICJGRUZsb29kIl9zICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1
ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAgICAgICAgIkZFSW1hZ2UiX3MgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2UsICAgICAg
ICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAgICAgICAiRkVNb3JwaG9sb2d5Il9zICAgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQsICAgICAg
ICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywgICJGRVNwZWN1bGFyTGlnaHRpbmciX3Mg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUsICAgICAgICAg
ICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAgICAgIkZFVHVyYnVsZW5jZSJfcyAgICAgICAg
fSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsICAg
ICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAgICAgICJTb3VyY2VHcmFwaGljIl9zICAgICAg
IH0KKworICAgICAgICB9OworICAgICAgICByZXR1cm4gZmlsdGVyTmFtZXM7CisgICAgfSgpKTsK
KyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0IEF0b21TdHJp
bmcmIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgZmlsdGVyVHlwZSkKK3sKKyAgICBh
dXRvIGl0ID0gZmlsdGVyTmFtZXMoKS5maW5kKGZpbHRlclR5cGUpOworICAgIEFTU0VSVChpdCAh
PSBmaWx0ZXJOYW1lcygpLmVuZCgpKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdiZTk4NGM0
ZDE3NzU4ZjY3MWFjMmY3ZGM1NjEyZjllMWQyMjhkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAt
MCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIklu
dFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFt
OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKworY2xhc3MgRmls
dGVyRnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJGdW5jdGlvbj4geworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDU1NGaWx0ZXIsCisg
ICAgICAgIFNWR0ZpbHRlciwKKworICAgICAgICBGRU1pbmltdW0sCisKKyAgICAgICAgRkVCbGVu
ZCA9IEZFTWluaW11bSwKKyAgICAgICAgRkVDb2xvck1hdHJpeCwKKyAgICAgICAgRkVDb21wb25l
bnRUcmFuc2ZlciwKKyAgICAgICAgRkVDb21wb3NpdGUsCisgICAgICAgIEZFQ29udm9sdmVNYXRy
aXgsCisgICAgICAgIEZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBGRURpc3BsYWNlbWVudE1h
cCwKKyAgICAgICAgRkVEcm9wU2hhZG93LAorICAgICAgICBGRUZsb29kLAorICAgICAgICBGRUdh
dXNzaWFuQmx1ciwKKyAgICAgICAgRkVJbWFnZSwKKyAgICAgICAgRkVNZXJnZSwKKyAgICAgICAg
RkVNb3JwaG9sb2d5LAorICAgICAgICBGRU9mZnNldCwKKyAgICAgICAgRkVTcGVjdWxhckxpZ2h0
aW5nLAorICAgICAgICBGRVRpbGUsCisgICAgICAgIEZFVHVyYnVsZW5jZSwKKyAgICAgICAgU291
cmNlQWxwaGEsCisgICAgICAgIFNvdXJjZUdyYXBoaWMsCisKKyAgICAgICAgRkVNYXhpbXVtID0g
U291cmNlR3JhcGhpYworICAgIH07CisKKyAgICBGaWx0ZXJGdW5jdGlvbihUeXBlKTsKKyAgICB2
aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIFR5cGUgZmlsdGVyVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZTsgfQorCisgICAgYm9vbCBpc0NTU0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpDU1NGaWx0ZXI7IH0KKyAg
ICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6
OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
clR5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyIHx8IG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0
ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJU
eXBlID49IFR5cGU6OkZFTWluaW11bSAmJiBtX2ZpbHRlclR5cGUgPD0gVHlwZTo6RkVNYXhpbXVt
OyB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZShUeXBlKTsKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNlQWxwaGFOYW1lKCkgeyByZXR1cm4gZmls
dGVyTmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmlu
ZyYgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUdy
YXBoaWMpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQorCisgICAgdmlydHVhbCBJbnRPdXRzZXRz
IG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
Y29uc3QgRmlsdGVyJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgeyB9CisK
K3ByaXZhdGU6CisgICAgVHlwZSBtX2ZpbHRlclR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUsCisKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlciwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlciwKKworICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFSW1hZ2UsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RU1lcmdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9s
b2d5LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2UsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBoYSwKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0NGI3YmU3YzM3MzBh
ZWI3ZDNiZjY0YmQ5MjI2YWJmNTU4YjQ4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMCwwICsx
LDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRl
IDxhcm1fbmVvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJbWFnZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5n
TW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlckltYWdlOjpG
aWx0ZXJJbWFnZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAg
ICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmICht
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAg
IG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1fcmVu
ZGVyaW5nTW9kZSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2lj
YWxTaXplKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpLCByZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAg
IHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9C
dWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5o
ZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7
CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsK
KworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5y
b3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRp
ZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIg
c3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCk7CisgICAgdWludDhf
dCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUg
KHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21w
b25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUg
LyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOworICAgICAg
ICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNv
dXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0Owor
ICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVySW1h
Z2U6OnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYg
cGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAo
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdC
QTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1
ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkg
fSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAg
ICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChhdXRvJiBzb3Vy
Y2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhh
KHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNp
emUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9
IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSkKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVm
ZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIH0KKwor
ICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
Y2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisK
KyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93Pigp
ICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNv
bG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBj
b2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRl
dGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3
aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQg
MikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xv
clNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRk
aXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisg
ICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNj
YWxlZFJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50U2l6ZSBzY2FsZWRQ
YWludFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRy
YW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgor
ICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxl
ZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlv
bi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVy
biBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlm
IChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2Nh
bGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkg
Pj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
eE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhP
cmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4g
PSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4
RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKTsKKworICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAg
aW50IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAt
eU9yaWdpbjsKKyAgICAgICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2Nh
bGVkUmVjdC5tYXhZKCk7CisgICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkp
CisgICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6
ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0g
c2NhbGVkUmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRl
c3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAg
ICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4
ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0
aW5hdGlvblNjYW5saW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsK
KyAgICAgICAgKyt5T3JpZ2luOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAg
RmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6
ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xv
ciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgor
ICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1w
ZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNl
IGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFn
ZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07
CisgICAgcmV0dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHJlY3QpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6
ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsK
KworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1
ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9j
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxC
dWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwor
dm9pZCBGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3Bh
Y2UpCit7CisgICAgYXV0byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhh
Rm9ybWF0KSA/ICZwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVs
bHB0cjsKKworICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAg
ICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAg
ICAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9s
b2dpY2FsU2l6ZSkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1
ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQs
IHJlY3QsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMo
Y29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHBpeGVsQnVmZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKwor
ICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigq
cGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5
SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3Jj
UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhl
bEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVy
SW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qg
b3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBo
YXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0g
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERh
dGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdl
QXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4
ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUg
NCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5
TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSAr
IChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAv
LyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBz
aXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5Q
aXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhl
bHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgo
c2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAg
IHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNp
eHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4
dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hp
bGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAm
PSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0
aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEg
YW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgt
LW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBh
IHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8v
IENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBs
b2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAg
ICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwor
ICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50
IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVy
SW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1
c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNl
CisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3Nhcnkg
SW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFu
c2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1
ZmZlci0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNw
YWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3Rk
OjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0
OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40Y2I1YTFmMGYwNjM4MTM1M2E4MWM5MTQ4Mjg3MjY3NWE5ZDI5ZmRkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgUGl4
ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVy
SW1hZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIEZsb2F0U2l6
ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yU3BhY2U7IH0KKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlz
dHMoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyKCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3Qm
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwor
ICAgIHZvaWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBjb3Jy
ZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJbWFn
ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCBy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisgICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxC
dWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNv
bnN0OworCisgICAgRmxvYXRTaXplIG1fbG9naWNhbFNpemU7CisgICAgUmVuZGVyaW5nTW9kZSBt
X3JlbmRlcmluZ01vZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGlu
YXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9pbWFnZUJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2Ez
Li5hNTk2ZDQ4ZTRkNTliNjM1MTljMjg5NzYyNGUwYTQ4Y2ZhMGZhZDBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcApAQCAtMjMsMTAgKzIzLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsMjEgKzMyLDIyIEBAIFJlZjxTb3VyY2VBbHBo
YT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNv
dXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorICAgIDogRmlsdGVyRWZmZWN0
KEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFs
cGhhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2Vm
ZmVjdE5hbWU7CisgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVj
dCk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkK
K3ZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpOworICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChm
aWx0ZXIpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK3ZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhp
Y3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKQEAgLTY5
LDExICs2Nyw0IEBAIFRleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5CiAgICAgcmV0dXJuIHRzOwogfQog
Ci1Tb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCi0g
ICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNlRWZmZWN0LmZpbHRlcigpLCBUeXBlOjpTb3VyY2VBbHBo
YSkKLXsKLSAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVyYXRpbmdD
b2xvclNwYWNlKCkpOwotICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCmluZGV4IDY2MjlhMzY3ZmQ0
MzI0MmQxYzRhYWRlNjRjNTYxZTg2NGEzOTQ5MGYuLjUyYTM5YTQ5MjQxNjExZTAxMTQ0MTdhNmEw
NGY2NmYwOWM2MTAzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKQEAgLTE3LDggKzE3LDcgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlQWxwaGFfaAotI2Rl
ZmluZSBTb3VyY2VBbHBoYV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogCkBAIC0yOCwxOSArMjcsMTYgQEAgY2xhc3MgU291cmNlQWxwaGEgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAogICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+
IGNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBl
ZmZlY3ROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKSB7
IHJldHVybiBGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpOyB9CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgU291cmNlQWxwaGEoRmlsdGVyRWZmZWN0Jik7Ci0gICAgRmlsdGVyRWZmZWN0
VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVNvdXJjZUlucHV0OyB9CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gU291cmNlQWxw
aGFfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKFNvdXJjZUFscGhhKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdk
NzgzOTJlOS4uZDY0NWFhOTI1MDJmYTdmZTY0NDY2N2RhZjNlMDU1YzA5ODM2YzFjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCkBAIC0yMiwzNyArMjIsMjkgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVh
dGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VHcmFwaGljOjpT
b3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VHcmFwaGljKQog
ewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
c19lZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhp
Yzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQordm9pZCBTb3VyY2VHcmFwaGljOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBm
aWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQo
KSk7CiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3Qp
KTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9p
ZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXJlc3Vs
dEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApp
bmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi42YmM0N2ExZjAx
YjU1NjM2NWI5NTc5NWU2YTA1YzVhZWIxNjMxMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMTgs
NDEgKzE4LDI2IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFNvdXJjZUdyYXBoaWNfaAotI2RlZmluZSBTb3VyY2VHcmFwaGljX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlR3JhcGhpYyA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBj
cmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoKTsK
IAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgc3RhdGlj
IGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKSB7IHJldHVybiBGaWx0ZXJFZmZlY3Q6OnNv
dXJjZUdyYXBoaWNOYW1lKCk7IH0KIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRl
ciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdy
YXBoaWMpCi0gICAgewotICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0gICAg
Y29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VHcmFw
aGljIjsgfQotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZpbHRlckVmZmVjdFR5
cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVj
dFR5cGVTb3VyY2VJbnB1dDsgfQogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlR3JhcGhpYykKLSAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0
dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
LQotCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJ
TFRFUl9FRkZFQ1QoU291cmNlR3JhcGhpYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCmluZGV4IDlhZWE1ZjFjMDcyYzA5YmYwNjNmNDk5OWUw
M2IyMTllODVkN2UyZDkuLmQ2N2IyOWI1MWM3OTFlNTIxNWViOTg5NzVmZDljZWI2YWM0ZmMwNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJS
VENBdWRpb0Zvcm1hdC5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZG
b3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggOWQ2YzJjZGQwNWY5NDliNjM0Y2FmYTE3YWMxN2Ri
NWMwMmI1YjYxMS4uZGZiZmY5YmY5ZjI1MGNmNDE0NzRkNTc5ZGVhY2RlMTIwMzhmYjg5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTI3LDkgKzI3LDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNh
Y2hlZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
aCIKLSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4
LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNo
YWRvdy5oIgpAQCAtMzgsNDUgKzM1LDE4MyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRl
cmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNv
dXJjZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVy
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0j
aWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZjxDU1NG
aWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlv
bnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBib29sIGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Cisg
ICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9
IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4oKTsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIoaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiwgc2NhbGVGYWN0b3IpKTsKKworICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6OkNT
U0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCitDU1NGaWx0ZXI6OkNTU0Zp
bHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpCisgICAg
OiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9y
LCBzY2FsZUZhY3RvciB9KQorICAgICwgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICwgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbihoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbikKKyAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KSkKIHsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJh
dGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCit7CisgICAgZmxv
YXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERl
dmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZp
YXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclBy
b3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CiAKLUdyYXBo
aWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAg
cmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0
cjsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAg
dHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5p
bnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rp
b247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwor
fQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1
bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlv
bi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUg
KiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAg
ICByZXR1cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRp
b24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xv
cigpLCAxKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2Fs
ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I2dyYXlzY2FsZUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVy
cy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAg
cmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBX
VEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVj
dD4gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQ
YXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICBhdXRvKiBmaWx0
ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpLnJlZmVy
ZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7
CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRy
YW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Cisg
ICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAy
ICogYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBm
bG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50Owor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUobnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1
cmF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1h
dHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Cisg
ICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVTZXBpYUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91
bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjAp
OworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAv
ZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlv
biBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAu
MTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAw
LAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1
cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1v
dmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVh
dGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2Vz
ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZp
bHRlckVsZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVt
ZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKICAgICBpZiAoIWZp
bHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQg
dG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmls
dGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRl
ciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24u
ZnJhZ21lbnQoKSk7CiAgICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVm
ZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRw
czovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRo
aXMgZG9lcyBhbnl0aGluZy4KQEAgLTg1LDIzMSArMjIwLDEyMyBAQCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBGaQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGJ1aWxk
ZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAg
bV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSk7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+PiByZWZlcmVuY2VFZmZlY3RzOwotCi0gICAgZm9yIChhdXRvJiBl
ZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxl
bWVudC5idWlsZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7
Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0
ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBl
ZmZlY3QgZnJvbSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgcmV0dXJu
IFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVy
U2NhbGUoKSwgZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCks
IHByZXZpb3VzRWZmZWN0KTsKK30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJk
QXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5k
ZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vs
c2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVy
LT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNl
RWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBl
bmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsK
K3N0YXRpYyB2b2lkIHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoRmlsdGVyRWZmZWN0JiBlZmZl
Y3QsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQoreworICAgIC8vIFVubGlrZSBTVkcgRmlsdGVy
cyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKKyAg
ICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1p
dGl2ZSBzdWJyZWdpb25zLgorICAgIGVmZmVjdC5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09
IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CisgICAgZWZmZWN0LnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiBib29sIENT
U0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQogewotICAgIG1faGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3Jp
Z2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbigpOwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7CisgICAgbV9mdW5jdGlvbnMuY2xl
YXIoKTsKICAgICBtX291dHNldHMgPSB7IH07CiAKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBw
cmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKKyAgICBSZWZQdHI8U1ZHRmls
dGVyPiBmaWx0ZXI7CisKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAg
ICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChm
aWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpS
RUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25j
YXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZl
Y3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZF
UlRfTElHSFRORVNTOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExF
X0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9u
IG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAu
Nzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAu
OTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
KnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY29uc3VtZXIpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAg
ICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3Vi
bGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9y
Zy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50
Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAg
ICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4
OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4z
NDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJp
eE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkp
IH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAg
ICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3Zl
KGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFk
b3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRl
ci4KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9w
ZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlh
dGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJv
cGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1
dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93
OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BT
aGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRv
d09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0
aW9uLmNvbG9yKCksIDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVy
KCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBy
ZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsKKyAgICAgICAgICAgIGVmZmVjdCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgc2V0dXBM
YXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgcHJl
dmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8g
VW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMg
b24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3Vs
ZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVm
ZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVy
RnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0Up
IHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHBy
ZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVj
dCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVz
KCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkg
PSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5h
cHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3Zl
KGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBh
bnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1f
ZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1RvRml0KCk7CisgICAgbV9m
dW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKKworICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBhbmQgbWF4RWZmZWN0UmVjdCBmb3IgdGhlIEZpbHRlckVmZmVj
dCBjaGFpbi4KKyAgICBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKworICAg
IC8vIFRoaXMgd2lsbCBzZXQgdGhlIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBhbmQgbWF4RWZm
ZWN0UmVjdCBmb3IgdGhlIEZpbHRlckVmZmVjdCBjaGFpbi4KKyAgICBkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKIAotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJh
d2luZ1JlZ2lvbik7CiAjaWYgVVNFKENPUkVfSU1BR0UpCiAgICAgaWYgKCFtX2ZpbHRlclJlbmRl
cmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRy
eUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVu
ZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKKyAgICAgICAgbV9maWx0ZXJS
ZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGlu
Z3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgKmxhc3RFZmZl
Y3QoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBD
U1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCit7CisgICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAm
c291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKK30KKwogYm9vbCBDU1NGaWx0ZXI6
OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewog
ICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQpAQCAtMzMxLDUzICszNTgsNjggQEAgdm9pZCBDU1NG
aWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiB0YXJnZXRDb250ZXgKICAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGxvZ2ljYWxTaXplID0gbV9zb3VyY2VEcmF3aW5nUmVnaW9u
LnNpemUoKTsKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gc291cmNlSW1hZ2VSZWN0KCkuc2l6ZSgp
OwogICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgp
ICE9IGxvZ2ljYWxTaXplKSB7CiAjaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJ
bWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0
YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQs
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsK
ICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgUmVu
ZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNv
dXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgor
ICAgICAgICBpZiAoYXV0byBjb250ZXh0ID0gaW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBj
b250ZXh0LT5zY2FsZShmaWx0ZXJTY2FsZSgpKTsKICAgICB9CiAgICAgbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkID0gdHJ1ZTsKIH0KIAorUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjps
YXN0RWZmZWN0KCkKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gbV9mdW5jdGlvbnMubGFzdCgp
OworICAgIGlmIChmdW5jdGlvbi0+aXNTVkdGaWx0ZXIoKSkKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5sYXN0RWZmZWN0KCk7CisKKyAgICByZXR1
cm4gZG93bmNhc3Q8RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5wdHIoKSk7Cit9CisKIHZvaWQgQ1NT
RmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8m
IGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lv
biA9IGxhc3RFZmZlY3QubWF4RWZmZWN0UmVjdCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVm
ZmVjdCgpOworICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0
aGlzKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gZWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7
CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNp
emUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4K
LSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1
dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCk7CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlIHsgMSwgMSB9OworICAgIGlm
IChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVy
U2NhbGUpKSB7CisgICAgICAgIHNldEZpbHRlclNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICAgICAg
ZWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKnRoaXMpOwogICAgIH0K
IH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCiB7CiAgICAg
bV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQot
ICAgICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZm
ZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgZm9y
IChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbi0+Y2xlYXJS
ZXN1bHQoKTsKIH0KIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKK3ZvaWQgQ1NTRmlsdGVyOjph
cHBseUZpbHRlcigpCiB7Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQo
KTsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsKICAgICBpZiAobV9maWx0ZXJSZW5k
ZXJlcikgewotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoZWZmZWN0KTsK
KyAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKCp0aGlzLCAqZWZmZWN0KTsK
ICAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAg
ICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7CisgICAgICAgICAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVjdC50cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmFwcGx5
KCp0aGlzKTsKKworICAgIGVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKQEAgLTM5MCwzNCArNDMyLDMwIEBA
IExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0
KGNvbnN0IExheW91dFJlY3QmIGZpbHRlCiAgICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwogfQog
Ci1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAorSW1hZ2VCdWZmZXIqIENT
U0ZpbHRlcjo6b3V0cHV0KCkKIHsKICAgICBpZiAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRl
clJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG1fZmlsdGVyUmVuZGVyZXIt
Pm91dHB1dCgpOwogICAgIAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIHJldHVybiBsYXN0RWZmZWN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7
CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QpCiB7Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNl
SW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAg
c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gZmFsc2U7Ci19CisgICAgYXV0byBzY2FsZWRTb3VyY2VJbWFnZVJlY3QgPSBzb3Vy
Y2VJbWFnZVJlY3Q7CisgICAgc2NhbGVkU291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlclNjYWxl
KCkpOwogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0
JiBlZmZlY3RSZWN0KQotewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAg
ICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7CisgICAgRmlsdGVyOjpz
ZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKKyAgICBGaWx0ZXI6OnNldFNvdXJjZUlt
YWdlUmVjdChzY2FsZWRTb3VyY2VJbWFnZVJlY3QpOworICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRh
Y2hlZCA9IGZhbHNlOwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0
CitJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpCiB7Ci0gICAgYXV0byYgbGFzdEVmZmVj
dCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0
KCk7CiAgICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVu
ZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAgICAgICByZXR1cm4g
bGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IG1f
ZmlsdGVyUmVnaW9uIH0pOworICAgIGlmIChlZmZlY3QtPmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRl
clJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKKyAgICAgICAgcmV0
dXJuIGVmZmVjdC0+cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBm
aWx0ZXJSZWdpb24oKSB9KTsKICAgICAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNDMwLDggKzQ2
OCw5IEBAIEludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKICAgICBpZiAoIW1f
b3V0c2V0cy5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKIAotICAgIGZvciAo
YXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5v
dXRzZXRzKCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAg
ICBtX291dHNldHMgKz0gZnVuY3Rpb24tPm91dHNldHMoKTsKKwogICAgIHJldHVybiBtX291dHNl
dHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4
MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5lZTNkZDlmZGY2NTFkNjM1OTNmZjRkOTJj
OTFhMTYzMzVhYzdkOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0z
OCw2OSArMzgsNTAgQEAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIGNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1l
bnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKIGVudW0gY2xh
c3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAog
Y2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxD
U1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSwg
ZmxvYXQgc2NhbGVGYWN0b3IgPSAxKTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Q7Ci0KLSAgICBib29sIGJ1aWxkKFJlbmRlckVs
ZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZv
aWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOwogCiAgICAg
Ym9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKKyAgICBib29sIGJ1aWxkKFJlbmRl
ckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwogICAg
IHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0
cyBvdXRzZXRzKCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmly
dHVhbCB+Q1NTRmlsdGVyKCk7Ci0KLSAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0
IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0g
ICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0
LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBs
YXN0RWZmZWN0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4RWZm
ZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJl
c3VsdHMoKTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKTsKKyAg
ICBJbnRSZWN0IG91dHB1dFJlY3QoKTsKIAogICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlUmVj
dChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIEludFJlY3Qgb3V0
cHV0UmVjdCgpIGNvbnN0OwotCiAgICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0
Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCk7CiAKLSAgICBGbG9hdFJlY3QgbV9zb3VyY2VEcmF3aW5nUmVnaW9u
OwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVy
KGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3Rvcik7CisKKyAgICBi
b29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKIAotICAgIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwogICAgIFJlZjxTb3VyY2VHcmFwaGljPiBt
X3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9zb3VyY2VBbHBoYTsK
KyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAKICAgICBtdXRh
YmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMGMyNjY5NjI5OTE3NGJkNmZkODljNjJiMWEwMjI5
NmZhODllNGJkOS4uZjdlNzNiMmY1MDE0OGNkNjZjMmI2OWRlZjFiMTRhNTM5OTJmMDQ4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjI2LDcgKzMyMjYs
NyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2ZUJvdW5k
cyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZy
b21Sb290LCB7IH0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFp
bnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIGVuY2xv
c2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJz
LT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIHJlbmRlcmVyKCksIGVuY2xv
c2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0
KSk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRl
eCAyNTBhN2Q1YzBiYWEwYWM3NDFhOTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li5mZDQ3ZDcyOTdjZTdh
YzBkOTEwMDFiOWRlYTM1ZmI0YmVmOTdiMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcApAQCAtMTE4LDIzICsxMTgsMTEgQEAgdm9pZCBS
ZW5kZXJMYXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAg
aWYgKCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7
Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAg
IG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBp
ZiAobV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9m
aWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBmaWx0ZXIg
ZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBh
dHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29t
cG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCiAgICAgLy8gRklYTUU6IHRoaXMg
cmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHls
ZSBkaWRuJ3QgY2hhbmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5k
ZXJlci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQot
ICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNy
ZWF0ZShyZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3Rv
cik7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXll
ckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25D
b250ZXh0LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVy
Qm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBs
YXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMTQ1LDYgKzEzMywxMyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVy
RmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9
IGZpbHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIGlm
IChoYXNVcGRhdGVkQmFja2luZ1N0b3JlIHx8ICFtX2ZpbHRlci0+bGFzdEVmZmVjdCgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRo
ZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCisgICAgICAgIC8vIGdvIHRocm91Z2gg
cmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFu
eXRoaW5nLgorICAgICAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIu
c3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVj
dDsKICAgICBlbHNlIHsKQEAgLTE1OSw4ICsxNTQsNiBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRl
ckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5h
dAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9uKCk7CiAgICAg
cmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLQogICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7CiAgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0
ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0
IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQpAQCAtMTg0LDE0ICsx
NzcsMTcgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogICAgIGF1dG8mIGZpbHRlciA9ICptX2Zp
bHRlcjsKICAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIGZpbHRl
ci5hcHBseSgpOworICAgIGZpbHRlci5hcHBseUZpbHRlcigpOwogCiAgICAgLy8gR2V0IHRoZSBm
aWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCiAgICAgTGF5b3V0UmVjdCBkZXN0
UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7CiAgICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zm
c2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZl
ciA9IGZpbHRlci5vdXRwdXQoKSkKKyAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVy
Lm91dHB1dCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZSh7IDEgLyBmaWx0
ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0
KCkgfSk7CiAgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1
dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAgICAgICBkZXN0aW5hdGlv
bkNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0KIAogICAgIGZpbHRl
ci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3
ZTc4NDRjOTE5NDViZjcuLjNhNzQ5OTVmMWY4NGJkOTczZWQyYjg4ZDMwNDM5N2I0YzQ0ZGEwMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAg
LTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0
IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVy
Qm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBs
YXllclJlcGFpbnRSZWN0KTsKICAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5k
ZXggMTk1MDlkOTcxOGFmZjExMGY4NDFlYzQ5NzZmOTdmYjFhOTM0ZDhhNS4uNTZkZDFjMjA1ZmY3
Njk2ODRiYTBiNzFjNDQ5MGY1YjFiYjRlYTRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTgyLDQw
ICs4Miw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZyb21D
YWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52YWxp
ZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRp
b24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0Zp
bHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoU1ZH
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENv
dW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hpbGRO
b2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0Jv
eCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1aWxk
ZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShm
aWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3godGFy
Z2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVu
T2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVu
dCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQo
KSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIt
PmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5j
b3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91
bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBpZiAoZWxlbWVudC5yZW5k
ZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVu
ZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9
PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAg
ICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQo
ZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1
aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VN
b2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTE0Myw0NSArMTA5LDM2IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEVsaW1p
bmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBh
YmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJz
b2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgp
LCAwLCAwKTsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNj
YWxlKCksIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpKTsKIAogICAgIC8vIERldGVybWluZSBh
YnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4K
ICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdC
b3goKTsKICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRh
LT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5k
cmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAg
ICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdC
b3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBhbGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMu
Ci0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+
ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNp
emUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4g
a01heEZpbHRlclNpemUuCi0gICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVE
cmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAg
dGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0g
ICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdGaWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+
ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKKyAgICBGbG9hdFJlY3QgYWJzb2x1
dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbjsKKyAgICBhYnNvbHV0
ZURyYXdpbmdSZWdpb24uc2NhbGUoZmlsdGVyU2NhbGUpOworICAgIEltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSk7
CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEw
MDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5s
YXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ3Jl
YXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgorICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtl
VW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCk7CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZH
RmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgZmls
dGVyU2NhbGUsIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywg
dGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+
YnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIEFTU0VSVChsYXN0RWZmZWN0KTsKIAogICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkp
OwogCi0gICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
CisgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0
ZXJEYXRhLT5maWx0ZXIpOwogICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5t
YXhFZmZlY3RSZWN0KCk7CisKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBh
IHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVz
IHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0YS0+
ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC0+
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgaWYgKEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpIHsKKyAg
ICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7Cisg
ICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqZmls
dGVyRGF0YS0+ZmlsdGVyKTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBp
cyBlbXB0eSwgd2UgaGF2ZSBzb21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgpAQCAtMTk0
LDkgKzE1MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgfQogCiAgICAgLy8gQ2hh
bmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhlIGZpbHRlcmVk
IGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZmlsdGVyLgotICAgIEFm
ZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm07Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3Jt
LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLSAgICBlZmZlY3RpdmVUcmFu
c2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0o
ZmlsdGVyU2NhbGUud2lkdGgoKSwgMCwgMCwgZmlsdGVyU2NhbGUuaGVpZ2h0KCksIDAsIDApOwog
CiAgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNF
X0xJTkVBUl9TUkdCKQpAQCAtMjY5LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGlj
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9
IGZpbHRlckRhdGEuYnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIGF1dG8gbGFzdEVmZmVjdCA9
IGZpbHRlckRhdGEuZmlsdGVyLT5sYXN0RWZmZWN0KCk7CiAKICAgICBpZiAobGFzdEVmZmVjdCAm
JiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVk
IG9uIHRoZQpAQCAtMjgxLDIxICsyMzYsMTYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAg
ICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJE
YXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCiAgICAgICAgIGlmICghbGFzdEVmZmVj
dC0+aGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJE
YXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAg
ICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAgICAgICAg
ICAgIGxhc3RFZmZlY3QtPmFwcGx5KCpmaWx0ZXJEYXRhLmZpbHRlcik7CiAgICAgICAgICAgICBs
YXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVy
RGF0YTo6QnVpbHQ7CiAKICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVm
ZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICAgICAgaWYgKHJlc3VsdEltYWdlKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpKTsKLQotICAg
ICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVy
UmVzb2x1dGlvbigpLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBm
aWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSkpOwogICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgbGFzdEVmZmVjdC0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZp
bHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKLQotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0
Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICAgICAg
Y29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCBjNjUwMjFiZWUwMzU1NjVhYWIzMWM2N2ZiOTMxOWY4OGU2MTgwN2M3Li42
NGUzYWM1YWVhYzgwYWRmOWUyNmFiNGVmNmI4NWEyN2MyNTQyZDE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQz
MiwxMSArNDMyLDEzIEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHRzIDw8ICJc
biI7CiAgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBh
c3NlZCB0byB0aGUgYnVpbGRlci4KICAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKLSAgICAg
ICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgp
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1
dG8gYnVpbGRlciA9IGZpbHRlci5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7
CisgICAgICAgIEZsb2F0U2l6ZSBkdW1teVNjYWxlKDEsIDEpOworICAgICAgICBTVkdGaWx0ZXJC
dWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNy
ZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpLCBidWlsZGVyLCBkdW1teVNjYWxlLCBkdW1teVJl
Y3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0KTsKKyAgICAgICAgaWYgKGR1bW15RmlsdGVyKSB7CiAg
ICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAKLSAg
ICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZm
ZWN0KCkpCisgICAgICAgICAgICBpZiAoYXV0byBsYXN0RWZmZWN0ID0gZHVtbXlGaWx0ZXItPmxh
c3RFZmZlY3QoKSkKICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VU
eXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMx
ZjY4Ni4uMDU0MGM4ZTQ0MDgyZDVjNjFmMDBmOGZiNzM1YzM2MTgyZDEwZmE3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0xMDAsMTkgKzEwMCwxNiBAQCB2
b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxl
bmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsK
KyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogCiAg
ICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwot
ICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFw
cGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisgICAg
YXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUobW9kZSgpKTsKKyAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5wdXQyKSB9OwogICAgIHJl
dHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKaW5k
ZXggOTAzN2NiMTIxZjkzNjdiNzg4ZDkyMTZlMGI5NDFmYzhiMDZkZWM2Ni4uZWJhOWFiYjU4MzI4
ZjRkYWJmMzQyOGI2YjE3ZGJmNTgyMzc2ODQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxl
bmRFbGVtZW50LmgKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
LCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uY2Rl
YmVmMThhMWZkY2JiOGYzZmIzNWZiODM4YWM2MDRjOWEyM2Q2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xMDAsOSArMTAwLDkgQEAg
dm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmls
dGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRF
ZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTE0MSw4ICsxNDEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAg
ICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVy
VmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAg
YXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShm
aWx0ZXJWYWx1ZXMpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlu
cHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4YjEyZTc3YmUy
MDZiOWM1YzQxMDIzZmQuLjk3MDExYTA0MWU0OWExN2ZiNDk4YTFmODQ2Zjg4MGRiZGQ2OTUyNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCkBAIC04
Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRleCA5MGE1NWI3
ZWZmZjdhM2ZlNjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi4yN2QxMmI1ZDA4ODNlYmYxZWFjMGFk
YWIxMTEyZmVlZWJiMTFmNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDkgKzYzLDkgQEAgdm9pZCBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtODYsOCArODYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdAogICAg
ICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpLnRyYW5z
ZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdkODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0
ZGQ1NDg2My4uNjAxNzEwZjdkMzUzNWExNDFhMTU3ODg1NGFmMmIwMzUxMTI5ZTk4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgK
QEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hh
bmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5jcHAKaW5kZXggM2NhOTliODc1NzA4YmJkOGE2YmFmNjUzZGMwNmZlMjA1YWM5ODIzNS4u
N2ZjZWQyZTY0NTU0MGUzYjlkZDA5NmNiZTQ5OTFmNTg0MTU1MDUxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKQEAgLTEzMSwxOSArMTMxLDE2IEBA
IHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1
aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVj
dEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJ
ZChpbjIoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmls
dGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAg
aW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5k
KGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKKyAgICBhdXRv
IGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwg
azMoKSwgazQoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1
dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXggODFhNzhjODY1N2EwZmEz
MDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJmNi4uNzRkODE0YzNjMjBlMGZkMzdlYjZhOGI1M2FmZjU2
OWQ4ZDExZGNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQu
aApAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAppbmRleCBmNzUw
NTgxNWRlY2FiYjRlYTM0YjQzNWI0N2VhNWE4MGM2YTI2ZGYxLi4xYTgxMzRhOWM4YjdmYzBhNTA3
NWVkZTgxYTBkMzY5NzBlOThjNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTE5MSw5ICsxOTEsOSBAQCB2b2lkIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVj
dEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMjQ2LDggKzI0Niw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgICAg
ICBkaXZpc29yVmFsdWUgPSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUp
LCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFs
dWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5l
bFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBG
RUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUp
LCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFs
dWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5l
bFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7CisgICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJu
IGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkwNDliMzM5
Li4xYjZiYmU0ODcxMjc1YzQyMWM4ZGQ0NDA5YzFiNDg5NzI5NWFhMTBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAzLDcgKzEw
Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDE1MmM5ODVmZDhlOTVhZTk5
NTdlNmUyMWQ2YmYyYTEwYzQ1NGJkZDUuLmRkMzk0NTk1Y2Y3MjY0OGE2N2Q1MjhhMTM0MTUxZGEz
NjdmNGM2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwCkBAIC0xNTEsOSArMTUxLDkgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdo
dEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTE2Miw3ICsxNjIsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlcgogICAgIGlmICghbGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmls
dGVyQnVpbGRlcik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRT
b3VyY2UoZmlsdGVyQnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTcwLDggKzE3MCw4IEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyCiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxl
KCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRp
bmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50
KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGln
aHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAg
ICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VT
Y2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5p
dExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAppbmRl
eCA2ODk5OTYwOWY0YjZiNTZhNzZjODhlYTU2OTVmMWUwZTllMjA1NTgwLi5iMmFhYzhiMDNlZDI0
ZDIxZDk4YjUxOWZiYThlNWY5NDVjYTMwODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3MjJkZmQw
NTE3M2Q4YzIuLjY5MDc1MTM3NTA3ZDZjNjQ3NDlhMWM4YmM0MTJhMGFlZTUxYTFhMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
CkBAIC0xMTUsMTkgKzExNSwxNiBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBh
dXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRv
IGlucHV0MiA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjIoKSk7CiAgICAgCiAgICAg
aWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoZmlsdGVyLCB4Q2hhbm5lbFNl
bGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0
RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisgICAgYXV0byBlZmZl
Y3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5u
ZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBX
VEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5wdXQyKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
aAppbmRleCBhYTkxZGYzOGIzNjI5OGYxMjFhMTQxMWM0ZDBhZTVlY2Q1ODY2NWQzLi5mMmM2ZDBi
MThmODVjOTRmMzg0ZjViZDFiZWZjMzU5ZWRlODIzZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCkBAIC05MSw3ICs5MSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIz
MjZhODliZmM1YjY4MS4uYmQ2MWMyNzRlMTUzNGZkOTFhYzM5ODBjNjQ1NjI5ODk5Y2Y2MjE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC0xMTEsMTIgKzEx
MSwxMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVy
ZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xv
cigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBp
ZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRp
b25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwg
b3BhY2l0eSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEp
IH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0
MmY3NDUxZC4uM2U0MDVkZTQ4OWM2ODFhNzZjNDRmOWE4Mjk3MzNhMjAyNmI0ZDhmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2ZmODdkMGI0YmNhYmQyMjQ0NzU4ZmMyLi5mMzI4
Y2M3YzE1ZWU3OTFiNGFhYmEzYThlNzFhODA0YzgwOTNkY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBTVkdGRUZsb29k
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBj
b25zdCBRdWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTY5LDcgKzY5LDcgQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgp
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAg
ZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0dXJuIEZF
Rmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4gRkVGbG9v
ZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVG
bG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVl
OTExLi5hZWQ2NjkxOTMzYmQwMmYzMzAxYTkyMzk3Yjc0MDU5ZmY2YmVjNGJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVy
dHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRj
OTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uZjFlNmJmNDlhNGRiM2RjYTc3NWM5Yjdl
ZmE1ZGI5ZGM4Njk4ODcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7
CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHN0
ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmls
dGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSk7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBl
ZGdlTW9kZSgpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0
MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0
MTAwMWNlNDhlZTBiMi4uZjQwZWIzMzc3OGM0M2RmNjFlZTU4OTYzZWVjZjllY2RiYTU0OWNjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAt
NTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKaW5kZXggZTE0Njg4YTVlYjE3NmYwMmExNmMwNTUwZjA4MTE5NWQzYzI3
ZWM0Zi4uNDJhMWNlMGVhNmFlMWQ0OWNiNmJiN2VhOTY3NDNiM2JlMDVhZjQ0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC0xNzQsMTYgKzE3NCwxNiBAQCB2
b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnBhcmVudFJlbmRlcmVyKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBpZiAo
bV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShm
aWx0ZXIsIG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNl
cnZlQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1h
Z2UobV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwgcHJlc2VydmVB
c3BlY3RSYXRpbygpKTsKIAogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJn
ZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKICAgICBpZiAoaXNE
ZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRp
bygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSh0cmVlU2Nv
cGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQogCiB2b2lkIFNWR0ZFSW1h
Z2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYg
dXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXggZDkz
ZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uMmEzZTlmNjBlYmZjMjdkMDEz
OWIyYzM3Njg1ZjMzOGIxYzhiNjc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNoSW5z
ZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlcXVlc3RJbWFn
ZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRl
eCBiZTJmNmUwMzA3ZGM1NTE2MDA3OTBmZDViZjE4MmYxZDk0NjIzZGQ2Li4xYzBkNTgyZDAxM2I4
N2NmMGUzYzExMDhiOTYyZjJkMzY5ZGMzMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAKQEAgLTQ1LDEzICs0NSwxMiBAQCBSZWY8U1ZHRkVNZXJnZUVsZW1lbnQ+
IFNWR0ZFTWVyZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gZWZmZWN0ID0gRkVN
ZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpOwotCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1lcmdlSW5wdXRzOworICAg
IAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5v
ZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1
aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJn
ZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChtZXJnZU5vZGUuaW4xKCkpOwog
ICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1lcmdlRWZmZWN0KSk7CkBAIC02Miw2
ICs2MSw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGCiAgICAgaWYgKG1lcmdlSW5wdXRzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBhdXRvIGVmZmVjdCA9IEZF
TWVyZ2U6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSBXVEZNb3ZlKG1l
cmdlSW5wdXRzKTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2OTc2YzY2OTdkYzUxMDc1ODAyZDI4M2Nm
NGUzYzIuLjQzN2NkNzI1NjMyYzVmNGM1MjQ4OTRjYzMyNmNhMDliNDE5ODUxN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBAIC0zNSw3ICszNSw3IEBAIHByaXZhdGU6
CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxT
VkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPjsK
ICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi44YjA1
NjBjNGRhODAwMzk3MDE0OGUxZTE1ZTJmMzA5N2I5MTUzMTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0xMTQsMjAgKzExNCwxOSBAQCB2
b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKLSAgICBmbG9h
dCB5UmFkaXVzID0gcmFkaXVzWSgpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7CisgICAgZmxvYXQgeVJh
ZGl1cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6
OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVN
b3JwaG9sb2d5OjpjcmVhdGUoc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7CisgICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJu
IGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZhYTY2OS4uYjIxYjZm
NWM0N2I3ODVkZjI4ZjAxM2VkZTU0MDFjODY2ZDQwZTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCmlu
ZGV4IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAwYTVlZTcuLjliMGQ3MDJhMWQy
NTg1NDIwOGI5N2ZmOWQ2YWRkMWY4MjdlMjlhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSwxNCArODEsMTQgQEAgdm9pZCBTVkdGRU9mZnNldEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5w
dXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZz
ZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZz
ZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKTsKICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBp
bnB1dDEgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1ZTM1YjU3MzcwNDli
ZWUuLjg5OTZmMjgyYjAxZThkOWNkNjY3YmYyMGI1Y2Q5ODhhNTk5YWY4ODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUo
dGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5
YTU5Li41NjNiOWYxN2I0YTkxNmI3ZDI2NTEyNDJkMzdkM2ZjMGJkNzUwMmUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCkBA
IC0xNjAsOSArMTYwLDkgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdo
dEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVy
QnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVj
dEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMTcxLDcgKzE3MSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlCiAgICAgaWYgKCFs
aWdodEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGF1dG8gbGln
aHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAg
ICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXJCdWls
ZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCkBAIC0xNzksNyArMTc5LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGUKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdD
b2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUo
ZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3Vs
YXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSk7CisgICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRp
bmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3Bl
Y3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgp
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUxNTZkMWM3OWEx
ZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjRkMWI1MzFjNDJiZWI4Y2RmYTIwMTUyMTYyMTE2NTEw
ZDAwOWJjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3MzU5NjY1
MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjAwMWRkNTA4OTIxNDk4OTE1NmQ3MjQ2N2FjMjBm
NGZmZjdkNGRjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAg
LTcwLDE1ICs3MCwxNSBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVj
dEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxl
OjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0
MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi5j
YWJhY2U2YmQwMWMyYjFkMzU2NGE1Y2VlNWMyNzViNjY5NmY5ZDQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAppbmRleCAx
MTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEyMzM0YTRkLi4xNTFiN2I5ZThlMDhhNDNl
N2NjY2I2ODA5YWE3MjkxNDZkYmJmMGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIFNWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmls
dGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lY
KCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZKCkgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVx
dWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hU
aWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAgcmV0dXJuIEZFVHVyYnVsZW5j
ZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVt
T2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENI
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgK
aW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4uNTBhZjkxMGVi
NThlMmM5MjI0MWE5MGRhOGNiZGZkYzY4MTRmOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5
OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLjM4ZDQ5ODYwOTMzODIxODdi
YWQyMjRkMjk3ZDQyNWM5MWRlNTM5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTM4LDcgKzM4
LDcgQEAgY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIDogcHVibGlj
IFNWR0VsZW1lbnQgewogcHVibGljOgogICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZp
bHRlckVmZmVjdCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0gMDsK
ICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20g
dGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggMzg1YWYyOTA4
NDhhM2QwYjgzZjEyYWM5NjE5ZTZiZjk2YzlmMjM5Ni4uMjE5MmU4MTViMmNiNjI3NTc3ODI3NzBm
NWIyMTM0YzhiNmRlYzQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTM1LDQwICszNSw0MyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3Bl
Y3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQorRkVJbWFn
ZTo6RkVJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1fcHJl
c2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1GRUltYWdlOjpG
RUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5n
JiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKK0ZFSW1hZ2U6
OkZFSW1hZ2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3Qg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDog
RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1fdHJlZVNj
b3BlKCZ0cmVlU2NvcGUpCiAgICAgLCBtX2hyZWYoaHJlZikKICAgICAsIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFn
ZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitS
ZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4gaW1hZ2Us
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgaW1hZ2UsIHByZXNl
cnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGltYWdl
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVh
dGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwg
Y29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHBy
ZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJl
ZmVyZW5jZShUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwgcHJl
c2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UodHJl
ZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQordm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGbG9hdFJlY3QgcGFp
bnRSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7CisgICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKICAgICBpZiAobV9pbWFnZSkgewogICAgICAgICBz
cmNSZWN0LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVj
dFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9IGVsc2UgaWYg
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAg
IHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXIt
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIH0gZWxzZSBpZiAoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkgeworICAgICAgICBzcmNS
ZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgICAg
IHNyY1JlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0KIAogICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKQEAgLTg3LDcgKzkwLDcgQEAgUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNl
ZFJlbmRlcmVyKCkgY29uc3QKICAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7
CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVJbWFn
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7CiAgICAgaWYgKCFt
X2ltYWdlICYmICFyZW5kZXJlcikKQEAgLTk2LDE2ICs5OSwxOCBAQCB2b2lkIEZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMg
aW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKICAgICBzZXRSZXN1bHRDb2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAg
IEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGRl
c3RSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIEZsb2F0UmVjdCBzcmNS
ZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7Ci0gICAgZWxzZSB7CisgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgIHNyY1Jl
Y3QgPSByZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAg
c3JjUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CiAg
ICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNS
ZWN0KTsKICAgICB9CkBAIC0xMTYsOCArMTIxLDcgQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OwogCiAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAg
ICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQu
c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCiAgICAgICAgIFJlZlB0ciBjb250ZXh0Tm9k
ZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgICAgICBp
ZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggYWMxNjBlZGNlN2Mw
ZTBhMDY3YmRlZmJkNzA3ZjJhYmU1NTkwODFiNi4uYzQyMTNjYWY3MmNmNjQ5YTFlYzFmMmQ3YTIx
ZTRmYWJlZDI0MzdjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtMzQsMjIgKzM0LDE4IEBAIGNsYXNzIFRyZWVTY29wZTsKIAog
Y2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFn
ZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBSZWY8
RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBzdGF0
aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0
ZVdpdGhJUklSZWZlcmVuY2UoVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+RkVJbWFn
ZSgpID0gZGVmYXVsdDsKLSAgICBGRUltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJl
ZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
Jik7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFSW1hZ2UiOyB9Ci0KLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICBGRUltYWdl
KFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAg
IEZFSW1hZ2UoVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlJik7CiAKICAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIo
KSBjb25zdDsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZpbmFsOworICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgZmluYWw7CiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CkBAIC02
MSwzICs1Nyw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUltYWdlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggOWE5NGE0
NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uODNmMzQxYWQzNDU3Y2Q0YTExYTMw
ZDUyY2JjOTI3MWRmMDJhOTM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yMiwyOSArMjIsODEgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQotICAgIDogRmlsdGVyKGFic29sdXRlVHJh
bnNmb3JtKQotICAgICwgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZH
RmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwg
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZp
b3VzRWZmZWN0KQoreworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwg
ZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBmaWx0ZXJSZWdpb24s
ICZwcmV2aW91c0VmZmVjdCk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1l
bnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwg
dGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdG
aWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJC
dWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNF
ZmZlY3QpCit7CisgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVt
ZW50LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YOworCisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRl
cihmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIHRhcmdldEJvdW5k
aW5nQm94LCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpKTsKKworICAgIGlmICghcHJldmlvdXNF
ZmZlY3QpCisgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyhTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKSk7CisgICAgZWxzZQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVj
dHMoeyAqcHJldmlvdXNFZmZlY3QgfSk7CisKKyAgICBidWlsZGVyLnNldFRhcmdldEJvdW5kaW5n
Qm94KHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBidWlsZGVyLnNldFByaW1pdGl2ZVVuaXRzKGZp
bHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSk7CisKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBi
dWlsZGVyLmJ1aWxkRmlsdGVyRWZmZWN0cyhmaWx0ZXJFbGVtZW50KTsKKyAgICBpZiAoIWxhc3RF
ZmZlY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0gMTAwOworICAgIGlmIChsYXN0RWZmZWN0
LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZN
b3ZlKGxhc3RFZmZlY3QpKTsKKyAgICByZXR1cm4gZmlsdGVyOworfQorCitTVkdGaWx0ZXI6OlNW
R0ZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0QkJveE1vZGUpCisgICAgOiBGaWx0
ZXIoRmlsdGVyOjpUeXBlOjpTVkdGaWx0ZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlclJlZ2lvbikKICAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdC
b3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCiAgICAgLCBtX2VmZmVjdEJC
b3hNb2RlKGVmZmVjdEJCb3hNb2RlKQogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBh
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CiB9CiAKLUZsb2F0U2l6ZSBT
VkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QK
K0Zsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoRmxvYXRTaXplIHNpemUp
IGNvbnN0CiB7CiAgICAgaWYgKG1fZWZmZWN0QkJveE1vZGUpCiAgICAgICAgIHNpemUgPSBzaXpl
ICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7CiAKLSAgICByZXR1cm4gRmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oc2l6ZSkgKiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uLnNpemUo
KSAvIG1fZmlsdGVyUmVnaW9uLnNpemUoKTsKKyAgICByZXR1cm4gRmlsdGVyOjpzY2FsZWRCeUZp
bHRlclNjYWxlKHNpemUpOworfQorCit2b2lkIFNWR0ZpbHRlcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCit7CisgICAgc2V0U291cmNlSW1hZ2UoeyBmaWx0ZXIuc291cmNlSW1hZ2UoKSB9
KTsKKyAgICBhcHBseUZpbHRlcigpOworfQorCit2b2lkIFNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIo
KQoreworICAgIG1fbGFzdEVmZmVjdC0+YXBwbHkoKnRoaXMpOworfQorCitJbnRPdXRzZXRzIFNW
R0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGFzdEVmZmVjdC0+b3V0
c2V0cygpOwogfQogCi1SZWY8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCit2b2lk
IFNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNW
R0ZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0
YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyUmVnaW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIG1f
bGFzdEVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBjZi4uZmU4
MjJkODFmOWNjYTQ2MTEwYTg3ZTJiMDQ4OGYzNmUwYWUwYmU4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTIwLDQxICsyMCw0NiBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNz
IFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0
ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCk7Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3Bh
Y2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVn
aW9uOyB9CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVt
ZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCk7CisgICAgc3RhdGljIFJlZlB0cjxT
VkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVy
RWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgRmxvYXRTaXplIHNjYWxlZEJ5
RmlsdGVyU2NhbGUoRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFwcGx5KGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHlGaWx0ZXIoKSBvdmVycmlkZTsKIAot
ICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAotICAgIGJvb2wg
aXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQorICAgIHZv
aWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxhc3RFZmZlY3QpIHsgbV9s
YXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQogCiBwcml2YXRlOgotICAgIFNWR0Zp
bHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0
QkJveE1vZGUpOworICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJv
eE1vZGUpOworCisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVT
b3VyY2VEcmF3aW5nUmVnaW9uOwogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94Owot
ICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2Zp
bHRlclJlZ2lvbjsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQogICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4g
ZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc1NWR0Zp
bHRlcigpOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmlu
ZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLmE4NmMwYTljYzk5
Y2NjYzM1ODUzZDNjZDI0OTAyNzg0NmZiYWE0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0yMCwy
MCArMjAsNzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1h
cHBpbmdzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWls
ZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMp
Cit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVm
ZmVjdD4gc291cmNlR3JhcGhpYykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjpl
ZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMucHRyKCkpOworICAgIG1fYnVpbHRpbkVmZmVjdHMu
YWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoc291cmNl
R3JhcGhpYykpOwogICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0
aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKK3sK
KyAgICBpZiAoYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
cygpOworCisgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0
aGUgY29tcHV0ZWQgc3R5bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0
aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7
CisgICAgfQorCisgICAgcmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsKK30KKyNlbmRp
ZgorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVm
ZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlmIChmaWx0ZXJFbGVt
ZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKKworICAgIGZv
ciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgZWZmZWN0ID0g
ZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAg
ICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZm
ZWN0LmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0
aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGlu
Z0JveCkpOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50
KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0Io
KSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVtZW50LnJl
bmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZm
ZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RFbGVtZW50LnJl
c3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKIHZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpCiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmlu
ZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLmI3YjgyNGI0ODQz
MjMyNTc3ZDIxMzBkODQ2YWFjOGI3ZjA5ZGU5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTM3LDcgKzM3
LDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNo
U2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKIAotICAgIFNWR0ZpbHRlckJ1aWxk
ZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgU1ZHRmlsdGVyQnVp
bGRlcigpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3Qg
RmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAgRmxvYXRSZWN0
IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsg
fQpAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKICAg
ICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKIAorICAgIHZvaWQg
c2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVu
dCYpOworCiBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAg
ICB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZjYyZDRlZjI0NmJkNzM4YTgyNWZmYTBmN2NkNmE3OTFhMmQ5NDY0Ni4uMjI5
MTIwYzlhZjFjYTEyMzM5MDhlM2JjYTY5MDYwYjk3ZTQyZWE4MSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMy
IEBACisyMDIxLTExLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtHUFUgUHJvY2Vzc10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVm
ZmVycyBpbnRvIGEgbmV3IGNsYXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKwor
MjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbR1BVIFByb2Nlc3NdIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRl
ckVmZmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMyNTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHR3byBmYWlsdXJlcyByZWxhdGVkIHRvIHRoZSBjb2xvciBzcGFjZSB0byBUZXN0RXhwZWN0
YXRpb25zLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKworMjAyMS0xMC0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9u
czoKKwogMjAyMS0xMS0wMSAgTWljaGFlbCBTbWl0aCAgPG1pa2VAdzMub3JnPgogCiAgICAgICAg
IFtXZWJJbnNwZWN0b3JdW0NPUlNdIFNob3cgSFRUUCBzdGF0dXMgY29kZSBpbiBDT1JTIG1lc3Nh
Z2VzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZTkxZjQxZTg4MmQ1NmVjMTljNmU1ZjIyMmU5Zjdm
NTNlNDZiYjgxZS4uZmFiZGNlZmQwMDgxMDY5ZjEzNTM2N2Q5MTI0Njg3MjdkOWZiZDhjMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9U
ZXN0RXhwZWN0YXRpb25zCkBAIC01MTg2LDMgKzUxODYsMTggQEAgc2VjdXJpdHkvY29udGVudFNl
Y3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMtYmxvY2tzLXF1aWNrdGltZS1wbHVnaW4tcmVwbGFj
ZW1lbnQKIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9wbHVnaW5zLXR5cGVzLWJsb2Nr
cy15b3V0dWJlLXBsdWdpbi1yZXBsYWNlbWVudC13aXRob3V0LW1pbWUtdHlwZS5odG1sIFsgU2tp
cCBdCiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1Z2lucy10eXBlcy1ibG9ja3Mt
eW91dHViZS1wbHVnaW4tcmVwbGFjZW1lbnQuaHRtbCBbIFNraXAgXQogdXNlcnNjcmlwdHMvdXNl
ci1zY3JpcHQtcGx1Z2luLWRvY3VtZW50Lmh0bWwgWyBTa2lwIF0KKworIyBUaGVzZSBmYWlsdXJl
cyBzaG91bGQgYmUgZml4ZWQgb25jZSB3ZWJraXQub3JnL2IvMjMxMjUzIGlzIHJlc29sdmVkCit3
ZWJraXQub3JnL2IvMjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ctbmVzdGVkLXNoYWRvdy1v
dmVybGFwcy1ody1uZXN0ZWQtc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzEyNTMgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1zaGFkb3ctb3ZlcmxhcHMtaHctbGF5ZXIuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBjb21wb3NpdGluZy9maWx0ZXJzL3N3
LXNoYWRvdy1vdmVybGFwcy1ody1zaGFkb3cuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzMTI1MyBjc3MzL2ZpbHRlcnMvZmlsdGVycy1vbi1zdmctcm9vdC5odG1sIFsgSW1hZ2VPbmx5
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGNzczMvZmlsdGVycy9zdmctYmx1ci1maWx0
ZXItY2xpcHBlZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUz
IGZhc3QvZmlsdGVyLWltYWdlL2ZpbHRlci1pbWFnZS1ibHVyLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgZmFzdC9ncmFkaWVudHMvY29uaWMtZ3JhZGllbnQt
ZXh0ZW5kZWQtc3RvcHMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
MTI1MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9keW5hbWljLWZpbHRlci1jb250ZW50cy0wMWEuc3Zn
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGltcG9ydGVkL21vemls
bGEvc3ZnL2ZpbHRlcnMvZmVDb21wb3NpdGUtMi5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZmlsdGVycy9mZVNwZWN1bGFy
TGlnaHRpbmctMS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMg
c3ZnL2ZpbHRlcnMvZmVMaWdodGluZy1jbGlwcGVkLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZp
bHRlci5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgc3ZnL2Zp
bHRlcnMvZmVJbWFnZS1jb2xvci1maWRlbGl0eS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
</data>
<flag name="commit-queue"
          id="467723"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443074</attachid>
            <date>2021-11-02 02:41:15 -0700</date>
            <delta_ts>2021-11-11 11:06:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211102024114.patch</filename>
            <type>text/plain</type>
            <size>312364</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uYzAxZjBlMWU3ZGJmZjE5NzI3Zjc5OTU5MjA0N2Jk
ZjRmNmE2ZTQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyMSBAQAorMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9naWMgZm9yIG1hbmFnaW5n
IHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdCB0byBpdHMg
aW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQnLiBUaGlzIHdpbGwKKyAg
ICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2ls
bCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3Ns
eSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9uLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0
ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxs
aW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNy
ZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9y
IGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBj
cmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICByZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcHBvc2l0ZSAKKyAgICAg
ICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkuIENvcnJlY3RpbmcgdGhl
IHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJp
bmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZm
ZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERl
bGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3Zl
ZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNS
ZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpp
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworMjAyMS0xMS0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVyRWZmZWN0LCB3ZSBhcmUK
KyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIHRvIHRoZSBG
aWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBuZWVkZWQuCisKKyAgICAg
ICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVu
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1h
Z2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3Jh
cGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNl
cGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6bGFzdEVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAg
ICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVp
bGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
Lmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmls
dGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQgYXMg
YW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24g
aW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFz
c29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIg
d2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0
ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhl
IHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgor
ICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNp
bmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhl
IFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRv
IGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlv
biBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEg
cG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5k
IENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRl
ciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZp
bmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0
IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVt
ZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhl
IHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhD
bGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2lu
ZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRo
aXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBk
aXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVm
ZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVG
YWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNp
emUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAg
ICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNr
ZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29v
cmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAg
ICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQg
Im1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpm
aWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJT
Y2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisK
KzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhl
IGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBo
b2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhp
cyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0Cisg
ICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24g
aW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rp
b24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVy
RWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJl
cGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAg
ICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNW
R0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
ZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6
OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9s
bXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdyZW9yZGVyLWN0b3IgaW4g
Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3ZGMzYmQyY2VkMTE4NGMy
ZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4MTFjOGNiY2M5YjE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzU1
YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLjZlNjI1OTliZjY3YTk4OTExZDFi
ZTJlNDY3NzRmODlmZDg5N2JjZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3IEBACiAJCTcyNEVEMzMy
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyog
SlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyog
QWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgw
RDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8q
IEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLzsgfTsKIAkJ
NzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyog
TmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmls
dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1By
b3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0
b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0MjI0MUJG
QjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZl
UHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFu
aW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU3MSw2ICsxMDU3NCw4
IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0
RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0
MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZE
IC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMkIy
NzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDEx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
N0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
NjQ0LDExICsxODY0OSwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdl
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1OUI1OTc3
MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAotCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4
MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
LywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgKi8s
CiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywKKwkJ
CQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5Q0UyMEQ3RTJC
ODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdDMzk4MyAvKiBy
dW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5ODMgLyogcnVu
dGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X21ldGhvZC5jcHAgKi8sCkBAIC0yNTI5MSw2ICsyNTI5NiwxMCBAQAogCQkJCTA4QzkyNTE4MEZD
QzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBC
MDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRD
MEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAorCQkJCTcyNjJENzU3
MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2MkQ3NTYy
NzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzI2QkUwMjkyNzJG
QjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3MkZCMTcy
MDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApAQCAtMzI3ODMsNiArMzI3OTIsNyBAQAogCQkJ
CTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCRTAyRDI3MkZC
MTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZF
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmlu
ZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3NzAuLmUwN2Y1NGEzNmQz
MmEyMzNiMzA3NjZjNGQ3NjYyMmU2OGVjZjA0OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiwyMCArMTE2LDIyIEBAIFJlZlB0cjxJbWFnZT4g
Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAg
ICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkK
KyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwor
ICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmlu
Z01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOworICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJ
bWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsK
LSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAg
ICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNv
dXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsK
IAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0
ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0
U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdp
b24oaW1hZ2VSZWN0KTsKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1f
ZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgCisgICAgY3NzRmlsdGVyLT5z
ZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBpZiAoIWNzc0ZpbHRlci0+
YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRl
ckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3Nz
RmlsdGVyLT5hcHBseSgpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3Zl
KHNvdXJjZUltYWdlKSk7CisgICAgY3NzRmlsdGVyLT5hcHBseUZpbHRlcigpOwogCiAgICAgYXV0
byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKICAgICBpZiAoIW91dHB1dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXggZTZjOGRm
NGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0NGFmNy4uZTdiYzg1MzI3MmFiNGRhZjdjOWI4
NTAxODZjYzk5YTk3NDRmOTM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFy
ZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0cHV0
SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7CiAgICAgRmxv
YXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwpAQCAtNTUs
MTIgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgp
OwogICAgIAogcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVy
cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKTsKICAgICB2b2lkIHJlbmRlclRvSW1hZ2VC
dWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3Jl
SW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAgUmV0YWluUHRyPENJSW1h
Z2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0YWluUHRy
PENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImKTsKICAgICBSZXRh
aW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgm
LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2Zl
ciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1h
Z2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOTdlMTEzN2IyOWQ3MWMy
YjU0NDE1NzMwNjcyNDAwYjgyNDI4YjM2MS4uOGI0MDAxNzcwMGUxMGM2ODdiYTcwNmU1NTk2Yjhj
MGIyMzBiYTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5tbQpAQCAtNzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFy
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlCiBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRl
cmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVy
biB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVm
ZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRl
clR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNv
bG9yTWF0cml4OiB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZm
ZWN0KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKQEAgLTg4
LDkwICs4OCw1NiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgogICAgICAgICByZXR1
cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29t
cG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRv
dzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxl
bmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OmFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBsYXN0RWZm
ZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxhc3RFZmZlY3Qp
OworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgbGFzdEVmZmVj
dCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgcmVuZGVy
VG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKIH0KIAotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYg
ZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Ojpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dEltYWdlczsKICAg
ICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAg
YXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOworICAgICAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgKmluKTsKICAgICAgICAgaWYgKCFp
bnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlucHV0SW1h
Z2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCk7CisgICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZp
bHRlcik7CiAgICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiAgICAgCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAg
c3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGVm
ZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhkb3duY2FzdDxT
b3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29s
b3JNYXRyaXg6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZmlsdGVyKTsK
KyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKICAgICAgICAgcmV0
dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3Qp
LCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRy
YW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRvd25jYXN0PEZF
Q29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKIAotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5j
dGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BTaGFk
b3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVs
ZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCitSZXRhaW5QdHI8
Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3Jh
cGhpYyhjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTI3Niw3ICsyNDIsNyBAQCBJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0CiB2b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSwgbGFzdEVm
ZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgbV9vdXRw
dXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IDEsIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwog
ICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewogICAgICAgICBjbGVhclJlc3VsdCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0yODgsNyArMjU0LDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZl
Y3QKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3QoY29u
c3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAogewogICAgIEludFNpemUgZGVzdFNp
emUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGRlc3RTaXpl
LnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0
IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNpemUpOwogICAgIHJldHVy
biBkZXN0UmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZi
MGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uMzY3NzJiMGYzZWE5NGU4NWU2NDJjNGJh
MGY2OWQwNzI3NzQwMDQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywx
MiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CmluZGV4IDVhYzdmNDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFkY2RiNjYuLjU2NDRmZWE3
YmY3N2I2NGZlZmY3ODUzNTA1MzQ1MTI3ZTRhNGNhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMzQsMTUgKzM0
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXIm
IGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpCbGVuZCkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwgbV9tb2RlKG1vZGUpCiB7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGUgbW9kZSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCiBib29sIEZFQmxlbmQ6
OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDEyICs1NCwxMiBAQCBib29sIEZF
QmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAogI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2
b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBp
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2
Li5lZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMjMs
MjIgKzIzLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXImLCBCbGVuZE1v
ZGUpOworICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZSk7CiAKICAgICBC
bGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBz
ZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9CisgICAgRkVCbGVuZChC
bGVuZE1vZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
ICAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LApAQCAtNDYsMTAgKzQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVu
ZE1vZGUpOwotCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxlbmQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcAppbmRleCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0N2E0MjEwYzI4NTQzMzJi
YTFkM2U1Li5iNjY0ZjI5ZTY0OTFhODlmZjM3NzkyMWUyYzJmYTk2YTI3ODEyNTVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKQEAgLTM1LDE2ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0
cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeCkKICAgICAsIG1fdHlw
ZSh0eXBlKQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewogfQogCi1SZWY8RkVD
b2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDb2xvck1h
dHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKK1JlZjxGRUNvbG9yTWF0cml4
PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9h
dD4mJiB2YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChm
aWx0ZXIsIHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wgRkVDb2xv
ck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTI3MywxMSArMjczLDEx
IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2FjNGRiNTUyNGVmYTRj
MTIzZi4uMjI5ZmYwYjhjNDRmNTFjMGVmMDU0ZTVlYTJhNDI0NmUyMjdkODdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcgQEAgZW51bSBDb2xvck1h
dHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwg
Q29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8RkVDb2xv
ck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAogICAg
IENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9v
bCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC01MCwxMSArNDgsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0ZToKLSAgICBGRUNvbG9yTWF0cml4
KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKLQotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7
IH0KKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMsNyArODksNCBAQCBpbmxp
bmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJu
IGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEw
Y2NmNTc0MDJmOWU2My4uODhlNTlmNTA4OTRlN2Q0ZjA3ZmFiMTlmNGU0M2Y4NmMzN2YzYzkzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5ICszMyw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitGRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAgICwgbV9y
ZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0
aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpAQCAtNDMsMTAgKzQyLDEw
IEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVmPEZFQ29tcG9uZW50VHJh
bnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0ZXIs
IHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24p
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKHJlZEZ1bmN0
aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKIH0KIAog
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJs
ZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAtMTA0LDExICsxMDMsMTEg
QEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJs
ZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMSw3ICsxMjAsNyBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
Y29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBo
YVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQoZGVz
dGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
ICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBp
eGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9uUGl4ZWxB
cnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zm
c2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4
NzExOWM0ZWIzNDhhNTEuLjZhZmVlNWU5Njg2MTcxMzc0MWUzOTlhNjhiNTFmMzk0MDgzZjA0M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Myw4
ICs1MSw3IEBAIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xhc3MgRkVD
b21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29t
cG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dy
ZWVuRnVuY3Rpb247IH0KQEAgLTYyLDEwICs1OSw3IEBAIHB1YmxpYzoKICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FscGhhRnVu
Y3Rpb247IH0KIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOwotCi0gICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KKyAgICBGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PjsKIApAQCAtNzcsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdy
ZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxl
KTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODksNiArODMsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVj
dC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFuc2ZlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKaW5kZXggODMzNTMwOTA4MWEyNmJhMmMzMWMzYmRhYzg4ODY2OWUyOGUzNDU2
ZC4uMmI4NzkyNDBlMWNiODZlMGI4ODhlMTNiODYzNjM2Y2VmMzBiZmZjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBv
c2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQorRkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVDb21wb3NpdGUpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fazEo
azEpCiAgICAgLCBtX2syKGsyKQpAQCAtNDIsOSArNDIsOSBAQCBGRUNvbXBvc2l0ZTo6RkVDb21w
b3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUs
IGZsbwogewogfQogCi1SZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0
ZTo6Y3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZSh0eXBlLCBrMSwgazIsIGszLCBrNCkpOwogfQogCiBi
b29sIEZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBl
KQpAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGll
ZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBj
KQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihjKSwgMjU1LCAwIH07CkBAIC0yMDEsNyArMTkzLDcgQEAgaW5saW5lIHZvaWQgRkVDb21w
b3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CkBAIC0yMTgsMjUgKzIxMCwyNSBAQCB2b2lkIEZFQ29t
cG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAgICAgICAgIHJldHVybjsKICAg
ICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVj
dHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
KyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90
eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CiAgICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0IGVmZmVj
dEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
ICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTI0
Nyw3ICsyMzksNyBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJh
ZTJmNzZhZWEwYzMuLjE0MzU4ZGMzY2Y2YzFmZDljZWNhYzcyZWQ5NTI5MThhNmU1ODJkMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArMzksNyBAQCBl
bnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFzcyBGRUNvbXBvc2l0ZSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNy
ZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwog
CiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsK
QEAgLTU4LDE4ICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVy
biBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29s
IHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90
eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAg
ICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0ZShj
b25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQp
OwogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBi
b29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCk7CkBAIC05MCwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1
NmVjMjkzM2MwZTk5ZjA1MC4uNjgxNzQ0ZWE0MjQwZTkxNDVkY2M5YzU4YjI2NTc2ZjkxZGM4NWM3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zMiwxMCArMzIsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNv
ciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCitGRUNvbnZvbHZlTWF0
cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwg
bV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAs
IG1fYmlhcyhiaWFzKQpAQCAtNDksMTEgKzQ3LDkgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252
b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAg
ICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZl
TWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IElu
dFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZp
c29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2
aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKICAg
ICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAKQEAgLTM2NywxMSArMzYz
LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxz
PGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IHVucHJlbXVsdGlwbGllZFJlc3VsdCgpIDog
cHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0zODEsMTUgKzM3NywxNCBAQCB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAg
ICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGlu
LT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRTaXplIHBhaW50
U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQorICAgIAogICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEgPSB7CiAgICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAogICAgICAgICBkZXN0aW5hdGlv
blBpeGVsQXJyYXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdl
ZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjk1NzZkZmVlN2U4NDJjYWY0NjUwODVhZDcxYmM3MGUy
ZjVhYWY1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0yNCw3ICsyNCw2IEBACiAKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1vZGVUeXBlIHsKIAogY2xhc3MgRkVDb252
b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IEludFNpemUmLAotICAg
ICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29u
c3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7
CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRh
cmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFNp
emU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6ZSYpOwpAQCAtNzcsMTQg
Kzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4Owog
ICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNpemUmLCBm
bG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwg
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBGRUNv
bnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZs
b2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4IjsgfQorICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0K
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTExNSwzICsxMDksNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5mNzZjZTJj
ZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhhNDA3ZDEzNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVE
aWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29u
c3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIs
IERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29u
c3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK0ZFRGlmZnVzZUxpZ2h0aW5n
OjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQorICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZh
Y2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVs
VW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
RGlmZnVzZUxpZ2h0aW5nKQogewogfQogCi1SZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVz
ZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5n
OjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VM
aWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVz
ZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKICAgICBpZiAobV9kaWZmdXNlQ29u
c3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRm
NjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjhhMTBhZWM4N2M4ZjE4OWY5
ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTI5
LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7CiAKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5n
IDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNl
TGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxp
Z2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KICAgICBib29sIHNldERpZmZ1c2VDb25z
dGFudChmbG9hdCk7CkBAIC0zOCw4ICszNyw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNm
YTEuLjY1NjYzZDkyOTY3ZWE2ZjdmMGJhY2MzNWMxN2UzZmMwMTAzNWFiNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0zMSwxOCArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0
ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAsIG1feENo
YW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9y
KHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3NjYWxlKHNjYWxlKQogewogfQogCi1SZWY8RkVE
aXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIs
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50
TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0
ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNo
YW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0
WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0
b3IpCkBAIC05MSw3ICs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9m
UGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAgcmV0dXJu
IHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwpAQCAtOTksMjkgKzk4LDI3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAh
PSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hB
Tk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVj
dEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+
Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVj
dCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5n
IHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24t
cHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9
IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgYXV0byBk
aXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJE
cmF3aW5nUmVjdCk7CiAgICAgCiAgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgp
ID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
IAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
eyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBzY2FsZUZv
ckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAu
NSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3
MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uNmVlNjhiMTA4ZGI3M2IwNzA0
ZmZlZDljNTEwYjQyM2ExYzc1YWRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMjIs
NyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNyBAQCBlbnVtIENoYW5uZWxTZWxlY3RvclR5
cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShGaWx0ZXIm
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIHN0YXRpYyBSZWY8RkVEaXNw
bGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCiAg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAgYm9vbCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0
IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAtNTIsMTMgKzUxLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQorICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAgICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CkBA
IC03MiwzICs2OSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlzcGxhY2VtZW50TWFwKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgwOTIxNmU0YjIyNDM1MTE4NjIzZTI4ZmZkNjFl
ZmEuLjZhOTZjYTk5MDkxYWFhY2MzYjNkMGJlMmFlZTk1MjM0OWFiMmI2MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAot
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBm
bG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJv
cFNoYWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0
ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVE
cm9wU2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAs
IG1fZHgoZHgpCkBAIC00MiwxOCArNDIsMTYgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3co
RmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG8KIHsK
IH0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNoYWRvdz4g
RkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3Rk
WSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBz
aGFkb3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpCit2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLQogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0
KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNldFBh
aW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qu
bW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Cisg
ICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRl
T2Zmc2V0UGFpbnRSZWN0KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKQEAg
LTcwLDE5ICs2OCwxNiBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCit2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0g
MiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
LSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkg
fSk7CisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOwogCiAgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1Jl
Z2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2UwNTczNGVlODhh
MjllZmYzODRjLi4xNzcwNTZiYmNmODgzZTY0YmQxNGUxYzRmODViNzRkZjY3M2ZjNDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYs
IGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25z
dCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3Rk
WCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxMyArNDcsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0
eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAgICBGRURyb3BTaGFkb3coRmlsdGVy
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAg
IEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSk7CiAKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRHJvcFNoYWRv
dyI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAg
IEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC03MCwzICs2Nyw0IEBA
IHByaXZhdGU6CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUz
NGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi5jNTcwZDljNTVlZjY1MzE2NDgwZDVj
ZTg5YmE3MjU0MjdlYjY3YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZs
b29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKICAg
ICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0KIAotUmVmPEZFRmxvb2Q+IEZF
Rmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZs
b2F0IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29s
b3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsK
IH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAg
LTU4LDkgKzU4LDkgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RP
cGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5k
ZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uYTIwNzgxOTJlNjY4
NjVkNzI4ZDRhZTQ3MzM0YWIxNDhjYjE0ZDg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIyLDE0ICsyMiwxMyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0
aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxv
b2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7
CkBAIC00NSwxMyArNDQsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRkVG
bG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29kKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQorICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTYxLDMgKzU4LDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMGY2ZWU4N2Y5NWU3
NTc1MTg2M2ZkMmU1ZjU0OWU3NGQ5NzI5ZGIxZi4uMTM2ZjY4YWFmNzdkOGIyNTAzYmJkZjZmNGQ4
ZThiNTg4YjExNzExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTc5LDE3ICs3OSwxNyBA
QCBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQm
IHJhZGl1cywgaW50JiBkZWx0YUxlZnQsCiAgICAgfQogfQogCi1GRUdhdXNzaWFuQmx1cjo6RkVH
YXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlw
ZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNzaWFuQmx1
cikKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAg
LCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1
c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2Rl
KSk7CiB9CiAKIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkK
QEAgLTQ4NSw3ICs0ODUsNyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAg
cmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZShzdGREZXZpYXRpb24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAtNDk2LDkgKzQ5Niw5IEBA
IEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEludFNpemUg
a2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0
ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJl
Y3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAvLyBFZGdlIG1v
ZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCBy
ZWN0LgpAQCAtNTE5LDExICs1MTksMTEgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MzYsMTEgKzUzNiw5IEBAIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUga2VybmVs
U2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwog
CiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgYXV0byB0bXBJ
bWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWlu
dFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2
NDdjYmIyZDNlLi43Njk2MjNhZmE1NDJjMGQ4NjI1YWRkYTA1OTI1MGY1ODVlMDUzYWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3Np
YW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBl
KTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJl
dHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAtNDUs
OSArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6
ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1
cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsgfQor
ICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKICAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAKQEAgLTY0LDkgKzYxLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CiAgICAgfTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04MywzICs4MCw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJf
RUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggNjU5YjEwNTVmNjFlYWFi
YzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uZmJkNTAzOTAyYmNjNThlZjUzNGY4NWE5OTEwYzRj
N2FiNzA1YzM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zNSw4ICszNSw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGln
aHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlw
ZSB0eXBlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKK0ZFTGlnaHRpbmc6OkZF
TGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdo
dFNvdXJjZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRWZmZWN0KHR5cGUpCiAgICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCiAgICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCkBAIC00NzEs
MTEgKzQ3MSwxMSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBi
MGJiNzBhMTRkMTc0OTUwNjczN2U4OGUwNTE0ZWU3OTY4MjBhNDQ5Li5kODUyZjhiMTNkZDc5N2Y4
ZTg5OTM1MWY4YjU4ZDM1ODVhMDNmMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjcsNyArMjcsNiBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgpAQCAtNDAsNyArMzksNyBAQCBzdHJ1Y3Qg
RkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2Nh
bGUoZmxvYXQpOwpAQCAtMTI4LDE2ICsxMjcsMTQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1l
dGVycyopOwogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRp
bmdQYWludGluZ0RhdGFGb3JOZW9uKik7CiAKLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0
aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQorICAgIEZFTGln
aHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKIAogICAgIGJvb2wg
ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwogCiAgICAgdm9pZCBz
ZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7CiAgICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5k
ZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uZmJmNTAzOTA5ZmM4
ZjhhM2RhYWRlNTY5MDMwOTdiMTRjZDVhZjY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yOCwyMiArMjgsMjIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmls
dGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitGRU1lcmdlOjpG
RU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWVyZ2Up
CiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitS
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoKSk7
CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK3ZvaWQgRkVNZXJn
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgdW5zaWduZWQg
c2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKIAot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5
ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uMDUxOWE1Njg4YTgzNjNmYzFiYTA2MzIw
NGRiMjJmNzQzMWFlMzRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIyLDIzICsyMiwyMSBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAg
c3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZp
bHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggNmFl
M2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1OGRhZWQ2Yi4uNWY3NGNmZDc0ZmI4Zjk4NTQz
OTZiNzU3YTRhYzIwZGI0YjYxODczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMzUsMTcgKzM1
LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xv
Z3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1v
cnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZl
Y3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkK
ICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9
CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
LCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFk
aXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRp
dXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3Bl
cmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQpAQCAtNzIsMTEgKzcyLDEwIEBAIGJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Cit2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBp
ZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVj
dFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjQwLDExICsyMzksMTEgQEAgYm9vbCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFy
cmF5LCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgsMTIgKzI1NywxMSBAQCB2b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAocGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVz
LndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAg
aWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICByYWRpdXMgPSBm
bG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNY
LCBtX3JhZGl1c1kgfSkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogICAgIGludCByYWRp
dXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0
aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdo
dCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIApAQCAtMjczLDEwICsyNzEsMTAgQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVs
QXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRp
b25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRh
LmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJh
ZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgcGFpbnRpbmdEYXRhLndpZHRoID0g
Y2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdo
dCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKKyAgICBwYWludGluZ0RhdGEu
cmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2Vp
bGYocmFkaXVzWSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaAppbmRleCA0OGZjMzU0MTE3ZmMyN2NjZmM4ZTkzZjE0ZWRmMDc1ZGUzOWM1YTExLi5h
ZTgxNTE1NGNlYWRhZWVkMzI2YTQ0OTM4NzFjZjNlODk3MGRmYmJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
QEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQs
NyArMzMsNyBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBo
b2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
TW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBj
cmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CiAKICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUpOwpAQCAtNDYsMTMgKzQ1LDExIEBAIHB1YmxpYzoKICAgICBi
b29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0
ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZ
KTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFTW9ycGhvbG9neSI7IH0KKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOwogCkBAIC04NiwzICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTW9ycGhvbG9n
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2NWFhNDE0MGY2
OS4uMDY1MDAxZTAwYjU4ZmM4NTAzMzAxMzdjOGJkNzEzMTU2Zjk3YjE1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
QEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpG
RU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4
LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zm
c2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNl
dD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQor
UmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiB2b2lkIEZFT2Zmc2V0
OjpzZXREeChmbG9hdCBkeCkKQEAgLTUyLDExICs1MiwxMCBAQCB2b2lkIEZFT2Zmc2V0OjpzZXRE
eShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZsb2F0UmVjdCBwYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBwYWludFJlY3QubW92ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsK
ICAgICBlbHNlCkBAIC02NCwxMSArNjMsMTEgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC03Niw4ICs3NSw3
IEBAIHZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
biA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5t
b3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKKyAg
ICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBt
X2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5C
dWZmZXIsIGRyYXdpbmdSZWdpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2
YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uZDNlYzk1YWRkZjEzNDdiNTNlZTA0ODdjNDBhZGIxOTAx
YWU0NDdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBm
bG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9h
dCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2b2lk
IHNldER4KGZsb2F0KTsKQEAgLTM3LDEzICszNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
eShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZs
b2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTMsMyArNTAsNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRl
eCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi4zODcwN2IzMDFmZDEx
MGJlY2JiMDRlMjVjZmM5ODJhMjA1ZmU2NDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVNwZWN1
bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0g
ICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBU
eXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYg
bGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5n
Q29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7CiB9CiAKLVJl
ZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJM
aWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25z
dGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5n
dGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
U3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29u
c3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVu
Z3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+
RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29sIEZFU3BlY3VsYXJMaWdodGlu
Zzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewogICAgIGlm
IChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEu
LmFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUzMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaApAQCAtMjcsOCArMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+
JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8
RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJvb2wgc2V0U3BlY3VsYXJD
b25zdGFudChmbG9hdCk7CkBAIC0zOSw4ICszOCw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGln
aHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFl
N2RjYTBjNWRiMmZjYWMyMGFkLi5lNzRhNzhjOWUyMTY5MDFhOTVlYWQxYjU5ZTZlZmE5NWQ5MDQx
YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCkBAIC0zMSwyMiArMzEsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQordm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3Jr
IGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhl
cndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdl
QnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC01OCwxMyArNTgsMTIg
QEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmxvYXRSZWN0IHRp
bGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0
TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwogICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0
TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRl
ckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBpZiAoaW4tPmZpbHRlclR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIHRpbGVSZWN0
ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVp
Z2h0KCkpOworICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAg
ICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7CiAg
ICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3
ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uZWQ3Njk1MWZiNWI0MzFkNTM3MmM0ZDNlZWE1
ODU3NTA1M2ZjZDEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yMiwyNyArMjIsMjMgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3Rh
dGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXIm
KTsKKyAgICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJF
ZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7
IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVU
aWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5YmI2ZTIwNmExZDJiZmFl
YjBjZWE5MTlmMGIuLmQ4MjUzMTYxNzQzYzU2YWFhNTc1ZjUyOTdkZTE3MzFlYzMwNDUzZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGljIGNvbnN0IGludCBzX3Jh
bmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQogc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3RhdGljIGNvbnN0IGludCBz
X3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmls
dGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3Rp
dGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUdXJidWxlbmNlKQor
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9iYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1
ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRl
ciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAK
LVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorUmVm
PEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1
ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5
WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVu
Y2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2NiwyMiArMzY2LDIxIEBAIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVu
dHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKICAgICBJbnRSZWN0IGZp
bHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxl
KGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVy
UmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFy
dFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGlu
dmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52
YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9
IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsr
eSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAgICAgICBwb2ludC5z
ZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRl
clJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgp
ICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBpbnZlcnNlVHJhbnNm
cm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhlaWdodCgp
KTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9m
UGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKQEAg
LTM5MSwxOSArMzkwLDE4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmCiAKIHZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0
YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICBwYXJhbWV0ZXJz
LT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRlcnMtPnBp
eGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERh
dGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQordm9pZCBGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQo
KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAog
ICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICBkZXN0aW5hdGlvblBpeGVs
QXJyYXkuemVyb0ZpbGwoKTsKQEAgLTQ0MCw3ICs0MzgsOCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAm
ZmlsdGVyOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZmZlY3QgPSB0aGlzOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAg
ICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CkBAIC00NTcsNyArNDU2LDcg
QEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgfQogCiAg
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJy
YXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1
Y2ZiLi41ZTU1MGQ5ZDZiNDA0YjYwNWZhOTE1NDE5MWMzMDA0MmRkMWJkOWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlw
ZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5j
ZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxG
RVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBz
dGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTk2LDcgKzk1
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwogCiAgICAgc3Ry
dWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7
CisgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVuY2UqIGVm
ZmVjdDsKICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CiAgICAgICAgIFBh
aW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwogICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7
CkBAIC0xMDYsMTkgKzEwNiwxNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJl
Z2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwogCi0gICAgRkVUdXJidWxlbmNlKEZp
bHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwor
ICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZs
b2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0
Y2hUaWxlcyk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQorICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hEYXRhIGNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hE
YXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3Jr
ZXIodm9pZCopOwogCkBAIC0xMzIsMyArMTMwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVUdXJi
dWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4u
ZjM1ZDliYTQyZmZiMGNhMmUwYzViOGNlY2YzZDYxZDJjN2EwMTc2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDU4ICsyMiw1NyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0OwogCi1jbGFzcyBGaWx0
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBG
aWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBt
X2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVy
U2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZh
dWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291
cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsg
fQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2Nh
bGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKLSAgICBGbG9hdFNpemUgZmls
dGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAg
IHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRp
b24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQorICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsg
fQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
KSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisgICAgCisgICAgRmxvYXRSZWN0
IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpIHsg
bV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7IH0KIAotICAgIGZsb2F0IGZpbHRl
clNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0Rmls
dGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgdmly
dHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlG
aWx0ZXIoKSB7IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRT
b3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJ
bWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQogCiAgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9
CiAgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkg
eyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIEZsb2F0
U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0
dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwotCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQg
RmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2Zp
bHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlvbikKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBl
IGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpCisgICAgICAgIDogRmls
dGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZpbHRlclNj
YWxlKQorICAgIHsKKyAgICB9CisKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikKKyAgICAgICAgOiBGaWx0ZXJG
dW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUp
CisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAs
IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdl
UmVjdDsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBSZW5kZXJpbmdN
b2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAg
ICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNj
OTI3ZGIxMDguLmUzMzMwYTFmNDY0NTI4ZGE3MzJmZGI2MjhlMjAzMDdmYzFhODRhMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTM1LDI1ICszNCwxNCBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
I2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5
cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlKHR5cGUpCitGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCiB7CiB9CiAKLUZpbHRlckVmZmVj
dDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7CiAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKQEAg
LTk2LDIyICs4NCwyMiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5z
Zm9ybS5tYXBSZWN0KHNyY1JlY3QpOwogfQogCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ewogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQg
ZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgogICAgIEZsb2F0
UmVjdCBzdWJyZWdpb247CiAgICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0g
aW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0
KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICAgICAgc3VicmVn
aW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihm
aWx0ZXIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVm
ZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9
IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAg
ICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CiAgICAgICAgICAgICBz
dWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwogICAgICAgICB9CiAgICAg
fSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNw
YWNlKCk7CisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAg
IC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRo
ZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4K
LSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAg
ICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOworICAg
IGlmIChmaWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCisgICAgICAg
IHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAogICAgIGF1dG8gYm91bmRhcmll
cyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKICAgICBpZiAoaGFzWCgpKQpAQCAtMTI1LDE1ICsxMTMs
MTQgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkKIAogICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwog
Ci0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3Jt
KCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0
ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gc3VicmVnaW9uOwor
ICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICAv
LyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0
aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgogICAgIHNl
dFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8v
IENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBhdXRv
IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0g
ICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Cisg
ICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24o
KTsKKyAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmls
dGVyUmVnaW9uKTsKIAogICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwpA
QCAtMTYzLDE0ICsxNTAsMTQgQEAgdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9m
RWZmZWN0SW5wdXRzKCkgY29uc3QKICAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxs
RWZmZWN0cyk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCit2b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgp
KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAgICAgICAg
aW4tPmFwcGx5KCk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOwogICAgICAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTc4LDQ4MiArMTY1LDEw
NSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgICAgICB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGluLCBpKTsKICAgICB9CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7CiAgICAgc2V0UmVz
dWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIg
PDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIg
PDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24g
IiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJl
Y3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1f
bWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29s
dXRpb24oKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24g
PDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAg
YWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVn
aW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8
ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBz
Y2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChtX2Fic29sdXRlUGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWly
ZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0
aXBsaWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3Rz
KQorICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsK
ICAgICB9Ci0gICAgCisKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCgpKQorICAgICAgICByZXR1cm47
CisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5k
IHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3Vs
dCgpCiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90
aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VB
cnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCog
cGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGgg
PSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMg
cGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxl
bmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4
ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhl
bERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgx
Nng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERh
dGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAg
ICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlM
ZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJy
YXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5n
IGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3
aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5
dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAg
ICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUg
cGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRh
ID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIElu
Y3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQorICAgIG1fZmls
dGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwor
ICAgIHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7
CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogewogICAg
IC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0
IGhhcwogICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4g
ZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1
bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVj
dHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOworICAgIGNsZWFyUmVzdWx0
KCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgZWZm
ZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQogICAgIGlmICghaGFzUmVz
dWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25S
ZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVs
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5h
cmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0g
ICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3Qs
IGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIHJldHVybiBtX2ZpbHRl
ckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnBy
ZW11bHRpcGxpZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBp
ZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0
KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBu
b3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lngo
KSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0
aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5v
dCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8
PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3Qu
eCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAg
IHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQg
eEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAg
IGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBp
ZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9y
aWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAg
aWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2Fs
ZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikg
KiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICog
NDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgo
eURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlF
bmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXpl
KTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAg
ICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQot
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0
aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRp
cmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1h
Z2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9u
UmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRD
b2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgp
LmFscGhhRm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNl
KGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEFscGhhRm9ybWF0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVyQ29u
dmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0
aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3
aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVkQnVmZmVy
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICAKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZl
ci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6
OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3Rp
bmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZl
clRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3Qp
OworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qs
IGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5w
cmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9y
U3BhY2UpIGNvbnN0CiB7Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8g
d2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBj
b252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5k
YXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
KyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rp
bmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8v
IFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAg
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xv
clNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFj
ZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxC
dWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJ
bWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHJlY3QpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKQogewogICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0
ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAg
ICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNl
KCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCht
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0
Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKKyAgICBpZiAoIW1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1f
cmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhG
aWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1
bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUp
OwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBP
bmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkp
OwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1f
YWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNl
IH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3Jl
YXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0
aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3Bh
Y2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9u
IHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFO
RCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9u
Q29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJz
aW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9maWx0ZXJJbWFn
ZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIAogfQogCiB2b2lkIEZp
bHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNF
RF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3Vs
dCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAg
aWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNh
biBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNp
b24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRo
ZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRy
YW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1
bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiBUZXh0U3RyZWFtJiBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRl
eCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi40OTc0MjE4YmUwNjNm
NzI3NGIwM2QxMjliZDNmMDc1NTQ4MTk5MDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTI0LDEzICsy
NCwxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUg
IkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgogI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Niw2NSArNDcs
MzYgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0g
ICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAot
ICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1
dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZm
ZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAg
ICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBD
b21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRp
bmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAg
ICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAg
IExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAg
T2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAg
ICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhp
YwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFy
UmVzdWx0KCk7CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUGl4ZWxCdWZmZXIqIHVucHJlbXVs
dGlwbGllZFJlc3VsdCgpOworICAgIFBpeGVsQnVmZmVyKiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7
CisKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2U7IH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlw
bGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxp
ZWRSZXN1bHRJZk5lZWRlZCgpOworCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5wdXRF
ZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwogICAgIAotICAgIGlubGluZSBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRz
IHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90
IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAg
fHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJl
Y3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25z
dDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CiAKICAgICAvLyBTb2xpZCBi
bGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCiAgICAgYm9vbCBpc0FscGhh
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KQEAgLTExNCwyMCArODYsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYg
YWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRS
ZWN0OyB9CiAKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAK
LQotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7
IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGlu
IHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0
aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZp
bHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQg
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgdm9pZCBhcHBseShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5
cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmly
dHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jik7CiAKICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERl
YnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0
aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CkBAIC0xNTYsMTEgKzExOSw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0
UG9pbnQpIGNvbnN0OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmls
dGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KICAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25z
dCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KICAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMo
Ym9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQogCkBAIC0xODEsNDAgKzEz
OSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOworICAgIEZpbHRlckVmZmVjdChUeXBlKTsKICAgICAKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2
YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2gg
Y29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVz
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYg
YSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFu
ZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGll
ZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0
ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0
aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZm
ZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXIm
KTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpID0gMDsKIAotICAgIEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVm
ZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwog
CiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMjQ4LDExICsxODQs
MTcgQEAgcHJpdmF0ZToKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xv
clNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICNlbmRpZgogICAgIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFz
c1R5cGU7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyVHlwZSgp
ID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAppbmRleCA1
NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5Y2M0Li41OWNmN2RmZTM0MzYxMWZi
MWE2ZjI2NTJmNjYwYjZjMGI4MTkwNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
CkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKICAgICAKIHB1
YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0
cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhj
b25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1Jl
c3VsdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0
JikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjViYjE1NjM4
MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0YWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSBmaWx0ZXJUeXBlKQor
ICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29u
c3QgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNo
TWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVy
RnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9u
OjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmls
dGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAg
ICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgs
ICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
ICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAg
ICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAg
ICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAg
IkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAi
RkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJG
RVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAi
U291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZp
bHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgp
OworfQorCitjb25zdCBBdG9tU3RyaW5nJiBGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBl
IGZpbHRlclR5cGUpCit7CisgICAgYXV0byBpdCA9IGZpbHRlck5hbWVzKCkuZmluZChmaWx0ZXJU
eXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmlsdGVyTmFtZXMoKS5lbmQoKSk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI3YmU5ODRjNGQxNzc1OGY2NzFhYzJmN2RjNTYxMmY5ZTFkMjI4ZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5p
bXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRy
aXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAor
ICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAg
ICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAg
RkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAg
ICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisg
ICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1
cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAor
CisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVy
RnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7
CisKKyAgICBUeXBlIGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGU7IH0K
KworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0g
VHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBtX2ZpbHRl
clR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV9maWx0ZXJU
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGZpbHRlck5hbWUoVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUFs
cGhhTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9CisgICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmls
dGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGZp
bHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7IH0KKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclJlc3VsdCgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9maWx0ZXJUeXBlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpD
U1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0
ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
dXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNl
QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFw
aGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZTgwYmQ2MWRhNDdlN2VlOTQ0NzZmNDAzNjQ4NDI0N2E3ZDRmNGJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhsb2dpY2FsU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2Uo
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkp
OworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNh
bFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdl
QnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2Nv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6
ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklm
RXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBt
X2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKwor
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJl
bXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgo
KSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNy
Yy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVz
dC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRh
KCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VD
b21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNd
OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8g
MjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGlj
IHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9u
ZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21w
b25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAg
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAg
IHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291
cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0p
ICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsK
KyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAg
ICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQg
Kz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxw
aGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdl
OjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAg
IGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7Cisg
ICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7
CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
aW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZm
ZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNh
bFNpemUpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9Cisg
ICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRT
aXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICghcGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoYXV0
byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBz
Y2FsZWRTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQ
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1
ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZl
cnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAg
Ly8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1
cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAg
IC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5v
bi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUg
c2NhbGVkUGFpbnRTaXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAor
eworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShy
ZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJl
Y3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0
ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBv
bmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JT
cGFjZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIo
Zm9ybWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1h
Z2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVm
ZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNp
emUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcg
UGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2Nh
bGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1
dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7
Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBj
b2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0
cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUo
KSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAg
ICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgor
ICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkp
IHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRT
aXplKG1fbG9naWNhbFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVk
UGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhh
Rm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAg
ICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Cisg
ICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxC
dWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAg
ICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRp
b24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0
ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lk
IEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAv
LyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBj
YW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VB
cnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCog
cGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGgg
PSBpbWFnZUFycmF5Lmxlbmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMg
cGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxl
bmd0aCAlIDQpKTsKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4
ZWxBcnJheUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhl
bERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgx
Nng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERh
dGEsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAg
ICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlM
ZW5ndGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJy
YXlMZW5ndGggLyA0OworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5n
IGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3
aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5
dGUgaW4gYSBwaXhlbAorICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAg
ICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUg
cGl4ZWwgbG9jYXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRh
ID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIElu
Y3JlbWVudCBmb3IgYWxwaGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lk
IEZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3Bh
Y2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7
CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVj
ZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3Bh
Y2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgor
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAg
aW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKTsKKworICAgIG1f
Y29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
ciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6
bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGNiNWExZjBmMDYzODEzNTNhODFjOTE0ODI4NzI2NzVhOWQyOWZkZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2Ns
YXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBG
bG9hdFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Cisg
ICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
cklmRXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxs
b3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZv
aWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3Jt
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAg
IGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRl
cyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlKSBjb25zdDsKKworICAgIEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmlu
Z01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91
bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBh
ZDZjZjNhMy4uYTU5NmQ0OGU0ZDU5YjYzNTE5YzI4OTc2MjRlMGE0OGNmYTBmYWQwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKQEAgLTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMiwyMiBAQCBSZWY8U291
cmNlQWxwaGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3Qp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9
CiAKLWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFs
cGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJT
b3VyY2VBbHBoYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1
cm4gc19lZmZlY3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0
Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3Vy
Y2VFZmZlY3QpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCit2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoZmlsdGVyKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCit2b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
CkBAIC02OSwxMSArNjcsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0
czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZm
ZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291
cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVm
ZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5
YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi41MmEzOWE0OTI0MTYxMWUwMTE0
NDE3YTZhMDRmNjZmMDljNjEwMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhh
X2gKLSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJj
ZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3RO
YW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRl
ckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNv
dXJjZUFscGhhX2gKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VB
bHBoYSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3
NGMxMTA3ZDc4MzkyZTkuLmQ2NDVhYTkyNTAyZmE3ZmU2NDQ2NjdkYWYzZTA1NWMwOTgzNmMxYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMjIsMzcgKzIyLDI5IEBACiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKGZp
bHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoKSk7CiB9CiAK
LWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQorU291cmNlR3Jh
cGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlR3Jh
cGhpYykKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlR3JhcGhpYyIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi12b2lkIFNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgU291cmNlR3JhcGhp
Yzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0g
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK3ZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uNmJj
NDdhMWYwMWI1NTYzNjViOTU3OTVlNmEwNWM1YWViMTYzMTJlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgK
QEAgLTE4LDQxICsxOCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3Jh
cGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3Jl
YXRlKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAg
IHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhp
YyhGaWx0ZXImIGZpbHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpT
b3VyY2VHcmFwaGljKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0
ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQog
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0g
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0
KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCi0KLQotI2VuZGlmIC8vIFNvdXJjZUdyYXBoaWNfaAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKFNvdXJjZUdyYXBoaWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMwOWJmMDYz
ZjQ5OTllMDNiMjE5ZTg1ZDdlMmQ5Li5kNjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFj
NGZjMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
TGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlh
VGltZUFWRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmEx
N2FjMTdkYjVjMDJiNWI2MTEuLmRmYmZmOWJmOWYyNTBjZjQxNDc0ZDU3OWRlYWNkZTEyMDM4ZmI4
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xv
ck1hdHJpeC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJG
RURyb3BTaGFkb3cuaCIKQEAgLTM4LDQ1ICszNSwxODMgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2Vk
U1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitS
ZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9y
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmls
dGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAs
IG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVy
OjpDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9y
KQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSkKKyAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4pCisgICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCkpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQorewor
ICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlv
bi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUo
c3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQog
Ci1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQog
ewotICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6
IG51bGxwdHI7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVs
bEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZm
ZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJh
bnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVy
RnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBu
dWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRv
d0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0
aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9u
KCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93
T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRp
b24uY29sb3IoKSwgMSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVH
cmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29s
b3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8v
IFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5k
ZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBh
cmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3
MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcy
MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsK
KworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+
IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0
byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMo
KS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVy
YXRpb24pOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24p
Cit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYg
Y29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
KSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1p
bnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAu
MCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZp
bGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5m
b3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43
NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
ODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAu
MTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisg
ICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRl
cj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZp
bHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jl
c291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBh
dXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAg
aWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjog
ZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAi
IDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmlu
ZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3Bl
cmF0aW9uLmZyYWdtZW50KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQg
dGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1l
bnQuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3Rz
LiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVh
ciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCkBAIC04NSwyMzEgKzIyMCwxMjMgQEAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgRmkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0
byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3Qp
OwotICAgIG1fc291cmNlQWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhh
OjplZmZlY3ROYW1lKCkpOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAg
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAo
YXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVm
ZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVm
ZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
Q1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8g
YnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9CisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAg
IHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVy
LmZpbHRlclNjYWxlKCksIGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJl
Z2lvbigpLCBwcmV2aW91c0VmZmVjdCk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRT
dGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZl
Y3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRp
b25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAg
YnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJl
ZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVj
dHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBl
ZmZlY3Q7CitzdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3sKKyAgICAvLyBVbmxpa2UgU1ZH
IEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmls
dGVyCisgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVp
ciBwcmltaXRpdmUgc3VicmVnaW9ucy4KKyAgICBlZmZlY3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25z
dW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOworICAgIGVmZmVjdC5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAog
Ym9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oKTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rp
b25zLmNsZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCiAgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRy
PFNWR0ZpbHRlcj4gZmlsdGVyOworCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24g
PSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQ
TEVfSU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmls
dGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygx
IC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAg
ICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVy
cy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcx
NTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3
MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8
Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
ewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZj
cy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1
aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0K
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUz
NCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29s
b3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFt
b3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0
aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsK
LSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwg
V1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVE
cm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xv
ci1maWx0ZXIuCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
MDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247
Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMs
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51
bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlh
dGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwg
MCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBz
dGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAg
ICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRy
b3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRv
d09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNW
R0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSwgcmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBu
dWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7
CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAg
IHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAg
ICAgbV9mdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAg
ICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVu
Y3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVy
ZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAg
ICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6
OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5k
KCplZmZlY3QpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJv
cGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAgICAgICAgICAgbV9mdW5j
dGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0g
V1RGTW92ZShlZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0
IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAg
IGlmIChtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOwor
ICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRo
ZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0
ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5k
IG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCisgICAgZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3Nv
dXJjZURyYXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGlmICghbV9maWx0
ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZp
bHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIG1f
ZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVy
LnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksICps
YXN0RWZmZWN0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dyYXBoaWNzQ29u
dGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3VyY2VJbWFn
ZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgQ1NT
RmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCkKIHsKICAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMzMSw1MyArMzU4LDY4IEBAIHZv
aWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBsb2dpY2FsU2l6ZSA9IG1fc291cmNlRHJhd2lu
Z1JlZ2lvbi5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgp
LnNpemUoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNh
bFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0
U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9k
ZSgpLCAmdGFyZ2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRD
b250ZXh0LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAg
ICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAg
ICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAj
ZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAg
ICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogICAgIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0Zp
bHRlcjo6bGFzdEVmZmVjdCgpCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25z
Lmxhc3QoKTsKKyAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisg
ICAgcmV0dXJuIGRvd25jYXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCiB2
b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIHsKLSAg
ICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBsYXN0RWZm
ZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKKyAgICBhdXRvIGVmZmVjdCA9
IGxhc3RFZmZlY3QoKTsKKyAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigqdGhpcyk7CisgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0
UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBp
bWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZh
Y3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsK
KyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCks
IGZpbHRlclNjYWxlKSkgeworICAgICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7Cisg
ICAgICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsK
ICAgICB9CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQog
ewogICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VB
bHBoYSkKLSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1
dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwor
ICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24t
PmNsZWFyUmVzdWx0KCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCit2b2lkIENTU0Zp
bHRlcjo6YXBwbHlGaWx0ZXIoKQogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgaWYgKG1fZmls
dGVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVm
ZmVjdCk7CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cygqdGhpcywgKmVm
ZmVjdCk7CiAgICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAg
ICAgICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisK
KyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9u
LT5hcHBseSgqdGhpcyk7CisKKyAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRl
cjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzQgKzQz
MiwzMCBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRp
cnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWlu
dDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVm
ZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYg
bV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJl
bmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQogewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9
IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3Qp
OwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCA9IGZhbHNlOwotfQorICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0
ID0gc291cmNlSW1hZ2VSZWN0OworICAgIHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0
ZXJTY2FsZSgpKTsKIAotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZs
b2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0
cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworICAgIEZp
bHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRT
b3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSBmYWxzZTsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3Qo
KSBjb25zdAorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGF1dG8mIGxh
c3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFz
dEVmZmVjdCgpOwogICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2Zp
bHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAg
cmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJl
Y3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICBpZiAoZWZmZWN0LT5oYXNSZXN1bHQoKSB8fCAo
bV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCisgICAg
ICAgIHJldHVybiBlZmZlY3QtPnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRS
ZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7CiAgICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQz
MCw4ICs0NjgsOSBAQCBJbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAg
aWYgKCFtX291dHNldHMuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVm
ZmVjdC0+b3V0c2V0cygpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykK
KyAgICAgICAgbV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4g
bV9vdXRzZXRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBi
OTE5MTdiODA0YzkyZDk0MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uZWUzZGQ5ZmRmNjUxZDYzNTkz
ZmY0ZDkyYzkxYTE2MzM1YWM3ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aApAQCAtMzgsNjkgKzM4LDUwIEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiBjbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCiBl
bnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9u
IH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRp
YyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdl
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsg
fQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChS
ZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsK
LSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsK
IAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCisgICAgYm9vbCBidWls
ZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVy
KTsKICAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwot
ICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3Qo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91
c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7
CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNl
dE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRlcm1l
ZGlhdGVSZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0
KCk7CisgICAgSW50UmVjdCBvdXRwdXRSZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdT
dG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRS
ZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUlt
YWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2lu
Z1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Citwcml2YXRlOgorICAgIENT
U0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0
U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpOwor
CisgICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKLSAg
ICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKICAgICBSZWY8U291cmNlR3Jh
cGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fc291cmNl
QWxwaGE7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogCiAg
ICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKIAotICAgIGJvb2wgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBjMjY2OTYyOTkxNzRiZDZmZDg5YzYy
YjFhMDIyOTZmYTg5ZTRiZDkuLmY3ZTczYjJmNTAxNDhjZDY2YzJiNjlkZWYxYjE0YTUzOTkyZjA0
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIyNiw3
ICszMjI2LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRp
dmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBv
ZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0
LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBh
aW50UmVjdCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5n
RmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigp
LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBh
aW50UmVjdCkpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5j
cHAKaW5kZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZmQ0N2Q3
Mjk3Y2U3YWMwZDkxMDAxYjlkZWEzNWZiNGJlZjk3YjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkK
IAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQog
ewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNy
ZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwot
ICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9
IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAg
ICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmls
dGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUg
ZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwg
c3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChl
LmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1F
OiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0
ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJl
ciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3Bl
cnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmls
dGVyOjpjcmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2Nh
bGVGYWN0b3IpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVn
aW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3Qm
IGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTE0NSw2ICsxMzMsMTMgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5n
U3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsK
KyAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0ZXItPmxhc3RFZmZlY3Qo
KSkgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQg
ZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bworICAgICAgICAvLyBnbyB0
aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBh
cHBseSBhbnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJl
bmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0
ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBk
aXJ0eVJlY3Q7CiAgICAgZWxzZSB7CkBAIC0xNTksOCArMTU0LDYgQEAgR3JhcGhpY3NDb250ZXh0
KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigp
OwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNz
Q29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNz
Q29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKQEAgLTE4
NCwxNCArMTc3LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRvJiBmaWx0ZXIg
PSAqbV9maWx0ZXI7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAg
ICBmaWx0ZXIuYXBwbHkoKTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAogICAgIC8vIEdl
dCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgogICAgIExheW91dFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9w
YWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKIAotICAgIGlmIChhdXRvKiBvdXRw
dXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCisgICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9
IGZpbHRlci5vdXRwdXQoKSkgeworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoeyAx
IC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgp
LmhlaWdodCgpIH0pOwogICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCpvdXRwdXRCdWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIu
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgZGVz
dGluYXRpb25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAg
ICBmaWx0ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkw
YjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0
NGRhMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5
b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVj
dCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3Qm
IGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjU2ZGQx
YzIwNWZmNzY5Njg0YmEwYjcxYzQ0OTBmNWIxYmI0ZWE0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBA
IC04Miw0MCArODIsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZv
ckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52
YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRp
dmVzKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3Vu
dENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0
byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpj
cmVhdGUoZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5n
Qm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRl
ckVsZW1lbnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBi
dWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhl
ZmZlY3QuY29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNl
dFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVm
ZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1l
bnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVt
ZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0
ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNl
bHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRl
ci0+YWRkKGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJl
dHVybiBidWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJl
c291cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xNDMsNDUgKzEwOSwzNiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwg
dG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgot
ICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55
U2NhbGUoKSwgMCwgMCk7CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNm
b3JtLnhTY2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKICAgICAvLyBEZXRl
cm1pbmUgYWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyBy
ZWdpb24uCiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJv
dW5kaW5nQm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmls
dGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lv
biA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVy
RGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmpl
Y3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lv
biwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJv
dW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmlt
aXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRl
ckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIu
IFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dl
ciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFi
c29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUp
OwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgp
KTsKLQotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAgRmxvYXRSZWN0
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb247CisgICAg
YWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVy
U2NhbGUpOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1
dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVp
bGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50
b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAg
IC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVy
ID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRl
ciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxk
ZXIsIGZpbHRlclNjYWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5k
YXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRl
ckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpKTsKIAotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOworICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVm
ZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVj
dCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVj
dCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RF
ZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGlmIChJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUp
KSB7CisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpOworICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKmZpbHRlckRhdGEtPmZpbHRlcik7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdS
ZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4K
QEAgLTE5NCw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKGZpbHRlclNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAw
LCAwKTsKIAogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKQEAgLTI2OSw3ICsyMjQsNyBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
R3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RF
ZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RF
ZmZlY3QgPSBmaWx0ZXJEYXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCiAgICAgaWYgKGxhc3RF
ZmZlY3QgJiYgIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3Qt
PmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJl
IGNhbGxlZCBvbiB0aGUKQEAgLTI4MSwyMSArMjM2LDE2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFw
aGljCiAgICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAo
ZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgogICAgICAgICBpZiAoIWxh
c3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0g
RmlsdGVyRGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwot
ICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Cisg
ICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgqZmlsdGVyRGF0YS5maWx0ZXIpOwogICAgICAg
ICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9
IEZpbHRlckRhdGE6OkJ1aWx0OwogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFn
ZSkgewotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5m
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgp
LCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3Qt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVy
RGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4
MDdjNy4uNjRlM2FjNWFlYWM4MGFkZjllMjZhYjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC00MzIsMTEgKzQzMiwxMyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB0
cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGlj
aCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7
Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFu
c2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAg
IGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdl
dCgpKSkgeworICAgICAgICBGbG9hdFNpemUgZHVtbXlTY2FsZSgxLCAxKTsKKyAgICAgICAgU1ZH
RmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmls
dGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSwgYnVpbGRlciwgZHVtbXlTY2FsZSwg
ZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7CisgICAgICAgIGlmIChkdW1teUZpbHRl
cikgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwogCi0gICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+
bGFzdEVmZmVjdCgpKQorICAgICAgICAgICAgaWYgKGF1dG8gbGFzdEVmZmVjdCA9IGR1bW15Rmls
dGVyLT5sYXN0RWZmZWN0KCkpCiAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJl
c291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJk
NmQwNjQzMWY2ODYuLjA1NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsxMDAs
MTYgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4x
KCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigp
KTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwot
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAg
IAorICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsK
ICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmViYTlh
YmI1ODMyOGY0ZGFiZjM0MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJh
OWMuLmNkZWJlZjE4YTFmZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEw
MCw5IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwK
ICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3Zl
KGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OworICAgIGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdU
Rk1vdmUoZmlsdGVyVmFsdWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIx
MmU3N2JlMjA2YjljNWM0MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBkYmRk
Njk1MjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXgg
OTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgzZWJm
MWVhYzBhZGFiMTExMmZlZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIHZv
aWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHQKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxk
KS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAg
ICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZl
OGI5OTNhNGRkNTQ4NjMuLjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJp
YnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRl
ZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFj
OTgyMzUuLjdmY2VkMmU2NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkgKzEz
MSwxNiBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBm
aWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVm
ZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3Jl
YXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygp
OwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3Rz
LmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisg
ICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsxKCks
IGsyKCksIGszKCksIGs0KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1v
dmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2
NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2YThi
NTNhZmY1NjlkOGQxMWRjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5
UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5k
ZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTljOGI3
ZmMwYTUwNzVlZGU4MWEwZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9p
ZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI0Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAg
ICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVy
WVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFy
Z2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVy
WVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFy
Z2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgp
OworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAg
IHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5
MDQ5YjMzOS4uMWI2YmJlNDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEw
Myw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4
ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4YTEz
NDE1MWRhMzY3ZjRjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNW
R0ZFTGlnaHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXIKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3Vy
Y2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQt
PmxpZ2h0U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsxNzAs
OCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5z
dmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVz
ZUxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VD
b25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQx
IH07CisgICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBz
dXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtl
cm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJhYWM4
YjAzZWQyNGQyMWQ5OGI1MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZk
NzIyZGZkMDUxNzNkOGMyLi42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWExYTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcApAQCAtMTE1LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsK
KyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogICAg
IAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENo
YW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAg
ICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBl
bmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1
dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCks
IHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZm
ZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4u
ZjJjNmQwYjE4Zjg1Yzk0ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1
ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5OWNm
NjIxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTEx
LDEyICsxMTEsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZs
b29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgp
OwogCi0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7
CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3Rk
RGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFk
b3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwg
Y29sb3IsIG9wYWNpdHkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUo
aW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEyYjYy
MWI4Y2JlNDJmNzQ1MWQuLjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4ZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAtNTMs
NyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29k
RWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZj
Mi4uZjMyOGNjN2MxNWVlNzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU1ZH
RkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29uc3QgUXVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2OSw3
IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkp
OwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJl
dHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJu
IEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1
Y2Y1MWZlZTkxMS4uYWVkNjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdh
OTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNkY2E3
NzVjOWI3ZWZhNWRiOWRjODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZm
ZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlv
blkoKSwgZWRnZU1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92
ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDllMjE0
ZmU5NGFlNDEwMDFjZTQ4ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNkYmE1
NDljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODEx
OTVkM2MyN2VjNGYuLjQyYTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQs
MTYgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFy
a0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRo
SW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
V2l0aEltYWdlKG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5j
ZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAgICAg
aWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50LmdldCgp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
V2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2Uo
dHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PFVSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmlu
ZGV4IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYwZWJm
YzI3ZDAxMzliMmMzNzY4NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZp
bmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1
ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMwZDU4
MmQwMTNiODdjZjBlM2MxMTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVyZ2VF
bGVtZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVmZmVj
dCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlucHV0
czsKKyAgICAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZF
TWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1
dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmlu
MSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOwpA
QCAtNjIsNiArNjEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJnZUlu
cHV0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBlZmZl
Y3QgPSBGRU1lcmdlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0gV1RG
TW92ZShtZXJnZUlucHV0cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgw
MmQyODNjZjRlM2MyLi40MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBw
cml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVn
aXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIx
Yi4uOGIwNTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsxMTQs
MTkgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0g
ICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZs
b2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMg
PCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMp
OworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAg
IHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2Njku
LmIyMWI2ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45YjBk
NzAyYTFkMjU4NTQyMDhiOTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZHRkVP
ZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
T2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBp
ZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgaW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1
NzM3MDQ5YmVlLi44OTk2ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29u
c3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0
NTlhODQyOWE1OS4uNTYzYjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
LmNwcApAQCAtMTYwLDkgKzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAg
IGlmICghbGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBh
dXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRl
cik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmls
dGVyQnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5j
b2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxp
Z2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCks
IHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0
aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50
KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExl
bmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2
ZDFjNzlhMWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1MjE2
MjExNjUxMGQwMDliYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3
NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZkNzI0
NjdhYzIwZjRmZmY3ZDRkYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCkBAIC03MCwxNSArNzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
ZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9
IEZFVGlsZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92
ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMz
YTkxZi4uY2FiYWNlNmJkMDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0
cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRo
aXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAK
aW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdiOWU4
ZTA4YTQzZTdjY2NiNjgwOWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJl
cXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBi
YXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwg
c3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBGRVR1
cmJ1bGVuY2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZ
KCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBF
X1NUSVRDSCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLjUw
YWY5MTBlYjU4ZTJjOTIyNDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5
WCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApp
bmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li4zOGQ0OTg2MDkz
MzgyMTg3YmFkMjI0ZDI5N2Q0MjVjOTFkZTUzOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0z
OCw3ICszOCw3IEBAIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6
IHB1YmxpYyBTVkdFbGVtZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhGaWx0ZXJFZmZlY3QqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVu
dCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4
NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjIxOTJlODE1YjJjYjYyNzU3
NzgyNzcwZjViMjEzNGM4YjZkZWM0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zNSw0MCArMzUsNDMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQ
dHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNl
cnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkK
K0ZFSW1hZ2U6OkZFSW1hZ2UoUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0
KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAg
LCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotRkVJ
bWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCitG
RUltYWdlOjpGRUltYWdlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYs
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
KyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBt
X3RyZWVTY29wZSgmdHJlZVNjb3BlKQogICAgICwgbV9ocmVmKGhyZWYpCiAgICAgLCBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+
IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBp
bWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+
IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdl
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFn
ZShpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFn
ZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVl
U2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJUklSZWZlcmVuY2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhy
ZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUlt
YWdlKHRyZWVTY29wZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi12b2lkIEZF
SW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK3ZvaWQgRkVJbWFnZTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmxvYXRS
ZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Q7CiAgICAgaWYgKG1faW1hZ2UpIHsKICAg
ICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBl
bHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQot
ICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJl
bmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICB9IGVsc2UgaWYg
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwor
ICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAg
ICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVm
ZmVjdFJlY3QoKSk7CkBAIC04Nyw3ICs5MCw3IEBAIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJl
ZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5k
ZXJlcigpOwogfQogCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCit2b2lk
IEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwogICAg
IGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCkBAIC05NiwxNiArOTksMTggQEAgdm9pZCBGRUlt
YWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUg
YWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCiAgICAgc2V0UmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
KyAgICBkZXN0UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIo
KS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOwotICAgIGVsc2UgeworICAgIGlmIChyZW5kZXJlcikgeworICAgICAg
ICBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Cisg
ICAgICAgIHNyY1JlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOwogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCk7CiAgICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
LSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBj
b250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgICAgICBSZWZQdHIgY29u
dGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAg
ICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYw
ZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmM0MjEzY2FmNzJjZjY0OWExZWMx
ZjJkN2EyMWU0ZmFiZWQyNDM3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTM0LDIyICszNCwxOCBAQCBjbGFzcyBUcmVlU2Nv
cGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQ
dHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0
aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3Bl
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Cisg
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
fkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRl
ciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUltYWdlIjsgfQotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAg
RkVJbWFnZShSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
KTsKKyAgICBGRUltYWdlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJl
bmRlcmVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFs
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKKyAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdl
OwpAQCAtNjEsMyArNTcsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4
IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjgzZjM0MWFkMzQ1N2Nk
NGExMWEzMGQ1MmNiYzkyNzFkZjAyYTkzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsMjkgKzIyLDgxIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdG
aWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5n
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNv
bHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0
JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1
aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgZmlsdGVy
UmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0
ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0
ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJS
ZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHBy
ZXZpb3VzRWZmZWN0KQoreworICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmls
dGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWDsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBT
VkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXBy
ZXZpb3VzRWZmZWN0KQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNl
R3JhcGhpYzo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0
aW5FZmZlY3RzKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRC
b3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVV
bml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZm
ZWN0ID0gYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYg
KCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKKyAgICBpZiAobGFz
dEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElu
cHV0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZl
Y3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmls
dGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAg
IDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJv
dW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9l
ZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVn
aW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9h
dFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUp
IGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6
ZSBzaXplKSBjb25zdAogewogICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQogICAgICAgICBzaXpl
ID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOwogCi0gICAgcmV0dXJuIEZpbHRl
cjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJTY2FsZShzaXplKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUlt
YWdlKCkgfSk7CisgICAgYXBwbHlGaWx0ZXIoKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFwcGx5
RmlsdGVyKCkKK3sKKyAgICBtX2xhc3RFZmZlY3QtPmFwcGx5KCp0aGlzKTsKK30KKworSW50T3V0
c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZl
Y3QtPm91dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2Rl
KQordm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1Jl
Z2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsK
KyAgICBtX2xhc3RFZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAw
Y2YuLmZlODIyZDgxZjljY2E0NjExMGE4N2UyYjA0ODhmMzZlMGFlMGJlODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw0MSAr
MjAsNDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVD
YXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7
CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJs
aWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZp
bHRlclJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmls
dGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxk
ZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUm
IGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBz
Y2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhcHBs
eShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKCkgb3ZlcnJp
ZGU7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAg
ICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0K
KyAgICB2b2lkIHNldExhc3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0
KSB7IG1fbGFzdEVmZmVjdCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAg
ICBTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29s
IGVmZmVjdEJCb3hNb2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVm
ZmVjdEJCb3hNb2RlKTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGlu
Z0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikK
ICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsg
cmV0dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24u
aXNTVkdGaWx0ZXIoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hODZj
MGE5Y2M5OWNjY2MzNTg1M2QzY2QyNDkwMjc4NDZmYmFhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApA
QCAtMjAsMjAgKzIwLDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxl
bWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAK
KyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmls
dGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VH
cmFwaGljKQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxG
aWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0
aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3Jl
YXRlKCpzb3VyY2VHcmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRl
KHNvdXJjZUdyYXBoaWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50
ZXJwb2xhdGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1l
bnQpCit7CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAg
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVl
IGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50
ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9
CisjZW5kaWYKKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRG
aWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmls
dGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGVm
ZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkg
eworICAgICAgICAgICAgY2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0
Qm91bmRpbmdCb3gpKTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0
RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5l
YXJTUkdCKCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxl
bWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZmZWN0RWxl
bWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZWZmZWN0OworfQor
CiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRy
PEZpbHRlckVmZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaAppbmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li5iN2I4
MjRiNDg0MzIzMjU3N2QyMTMwZDg0NmFhYzhiN2YwOWRlOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0Zp
bHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94
KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZs
b2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRp
bmdCb3g7IH0KQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3Rz
KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAg
ICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhp
Yyk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRl
ckVsZW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0
cygpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGY2MmQ0ZWYyNDZiZDczOGE4MjVmZmEwZjdjZDZhNzkxYTJkOTQ2
NDYuLjIyOTEyMGM5YWYxY2ExMjMzOTA4ZTNiY2E2OTA2MGI5N2U0MmVhODEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNv
bT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVz
dWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlv
bnM6CisKKzIwMjEtMTEtMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJv
bSBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCB0d28gZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVz
dEV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAt
MzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQ
cm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMjEtMTEtMDEgIE1pY2hhZWwgU21pdGggIDxtaWtlQHczLm9yZz4KIAog
ICAgICAgICBbV2ViSW5zcGVjdG9yXVtDT1JTXSBTaG93IEhUVFAgc3RhdHVzIGNvZGUgaW4gQ09S
UyBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGU5MWY0MWU4ODJkNTZlYzE5YzZlNWYy
MjJlOWY3ZjUzZTQ2YmI4MWUuLmZhYmRjZWZkMDA4MTA2OWYxMzUzNjdkOTEyNDY4NzI3ZDlmYmQ4
YzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNTE4NiwzICs1MTg2LDE4IEBAIHNlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS9wbHVnaW5zLXR5cGVzLWJsb2Nrcy1xdWlja3RpbWUtcGx1Z2lu
LXJlcGxhY2VtZW50CiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1Z2lucy10eXBl
cy1ibG9ja3MteW91dHViZS1wbHVnaW4tcmVwbGFjZW1lbnQtd2l0aG91dC1taW1lLXR5cGUuaHRt
bCBbIFNraXAgXQogc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMt
YmxvY2tzLXlvdXR1YmUtcGx1Z2luLXJlcGxhY2VtZW50Lmh0bWwgWyBTa2lwIF0KIHVzZXJzY3Jp
cHRzL3VzZXItc2NyaXB0LXBsdWdpbi1kb2N1bWVudC5odG1sIFsgU2tpcCBdCisKKyMgVGhlc2Ug
ZmFpbHVyZXMgc2hvdWxkIGJlIGZpeGVkIG9uY2Ugd2Via2l0Lm9yZy9iLzIzMTI1MyBpcyByZXNv
bHZlZAord2Via2l0Lm9yZy9iLzIzMTI1MyBjb21wb3NpdGluZy9maWx0ZXJzL3N3LW5lc3RlZC1z
aGFkb3ctb3ZlcmxhcHMtaHctbmVzdGVkLXNoYWRvdy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBzLWh3LWxh
eWVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgY29tcG9zaXRpbmcvZmls
dGVycy9zdy1zaGFkb3ctb3ZlcmxhcHMtaHctc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzEyNTMgY3NzMy9maWx0ZXJzL2ZpbHRlcnMtb24tc3ZnLXJvb3QuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBjc3MzL2ZpbHRlcnMvc3ZnLWJs
dXItZmlsdGVyLWNsaXBwZWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzMTI1MyBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYmx1ci5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGZhc3QvZ3JhZGllbnRzL2NvbmljLWdy
YWRpZW50LWV4dGVuZGVkLXN0b3BzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZHluYW1pYy1maWx0ZXItY29udGVudHMt
MDFhLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBpbXBvcnRl
ZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRlLTIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGltcG9ydGVkL21vemlsbGEvc3ZnL2ZpbHRlcnMvZmVT
cGVjdWxhckxpZ2h0aW5nLTEuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjMxMjUzIHN2Zy9maWx0ZXJzL2ZlTGlnaHRpbmctY2xpcHBlZC5zdmcgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3
cG9ydC1maWx0ZXIuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUz
IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtY29sb3ItZmlkZWxpdHkuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443075</attachid>
            <date>2021-11-02 02:53:35 -0700</date>
            <delta_ts>2021-11-11 11:06:56 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>Filters-split-filter-image.patch</filename>
            <type>text/plain</type>
            <size>80013</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjM2ZkYmMyNWRkZTguLjIyOTEyMGM5YWYxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDIxLTExLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtHUFUgUHJvY2Vzc10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVy
cyBpbnRvIGEgbmV3IGNsYXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKwogMjAy
MS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
R1BVIFByb2Nlc3NdIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVm
ZmVjdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZWZkYTEzMWVlYmNlLi5mYWJkY2VmZDAwODEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucwpAQCAtNTE5OSwzICs1MTk5LDUgQEAgd2Via2l0Lm9yZy9iLzIzMTI1
MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9keW5hbWljLWZpbHRlci1jb250ZW50cy0wMWEuc3ZnIFsg
SW1hZ2UKIHdlYmtpdC5vcmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZmlsdGVycy9m
ZUNvbXBvc2l0ZS0yLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTI1
MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlU3BlY3VsYXJMaWdodGluZy0xLnN2ZyBb
IEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9mZUxp
Z2h0aW5nLWNsaXBwZWQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMx
MjUzIHN2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2ZyBbIEltYWdl
T25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9mZUltYWdlLWNv
bG9yLWZpZGVsaXR5LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGEzYzlm
M2ExMjIxMy4uYzAxZjBlMWU3ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM2IEBACisyMDIx
LTExLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtH
UFUgUHJvY2Vzc10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRv
IGEgbmV3IGNsYXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHN0b3JhZ2UgYW5kIHRoZSBsb2dpYyBm
b3IgbWFuYWdpbmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgRmlsdGVyRWZm
ZWN0IHRvIGl0cyBpbnB1dHMgdG8gYSBuZXcgY2FsbHMgbmFtZWQgJ0ZpbHRlclJlc3VsdCcuIFRo
aXMgd2lsbAorICAgICAgICBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZm
ZWN0LiBJdCB3aWxsIGFsc28gYWxsb3cgaW50ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFn
ZSBzZWFtbGVzc2x5IGFuZCBzaW1wbGlmeWluZyB0aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24uCisK
KyAgICAgICAgSW5zdGVhZCBvZiBoYXZpbmcgdGhyZWUgd2F5cyB0byBjcmVhdGUgdGhlIHJlc3Vs
dCBvZiBhIEZpbHRlckVmZmVjdCwgdGhlcmUKKyAgICAgICAgd2lsbCBiZSBvbmUgd2F5IHdoaWNo
IGlzIGJ5IGNhbGxpbmcgRmlsdGVySW1hZ2U6OmNyZWF0ZSgpLiBUaGlzIGNhbGwgd2lsbAorICAg
ICAgICBub3QgY3JlYXRlIGEgY29uY3JldGUgcmVzdWx0LiBCdXQgcmVxdWVzdGluZyB0aGUgSW1h
Z2VCdWZmZXIgb3IgYSBQaXhlbEJ1ZmZlcgorICAgICAgICBmcm9tIEZpbHRlckltYWdlIHdpbGwg
bWFrZSB0aGlzIGNyZWF0aW9uIGhhcHBlbnMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhlIG9wcG9z
aXRlIAorICAgICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKS4gQ29y
cmVjdGluZyB0aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBkb25lIGJ5
IEZpbHRlckVmZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpG
aWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOgorICAg
ICAgICBDbGVhcmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5n
bGUgcG9pbnRlci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZl
clJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVs
dGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cHlQcmVtdWx0aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlv
bnMgd2FzIG1vdmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldE1heEVmZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQ
cm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoaXNUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCiAyMDIx
LTExLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtH
UFUgUHJvY2Vzc10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZm
ZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGUwNzU0NDBjZjJkZi4uOGYzMGUzM2Y4MmI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMjA2Myw2ICsyMDYzLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDFhMTRlMDkxNTJiYS4uNmU2MjU5OWJmNjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk4LDYgKzIyOTgsNyBA
QAogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIy
MzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3
RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYx
REM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNkJFMDJEMjcyRkIx
NzIwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdl
LmggKi87IH07CiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBO
YXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAw
NEQyOTMxIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDU3Myw2ICsxMDU3NCw4IEBACiAJCTcyNjZGMDI4
MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAv
KiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZE
IC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4
IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
c1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NjQ2LDExICsxODY0OSwx
MSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5
RTggLyoganNjICovLAotCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAog
CQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLywKIAkJCQkxQTcxRDU3
OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgKi8sCiAJCQkJMUE3MUQ1N0Ew
RjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywKKwkJCQk1OUI1OTc3MTExMDg2
NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBv
YmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmNw
cCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oICov
LAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5jcHAgKi8s
CkBAIC0yNTI5NSw2ICsyNTI5OCw4IEBACiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5
IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywKIAkJCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkg
LyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJCQk3MjZCRTAyOTI3MkZCMTcxMDA3MzhGRkQgLyog
RmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyNkJFMDJCMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0
ZXJJbWFnZS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCkBAIC0zMjc4Nyw2ICszMjc5Miw3IEBACiAJCQkJMDhDOTI1MUEwRkNDN0M0
QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkM4NTY1MzQy
NEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkJFMDJEMjcyRkIxNzIwMDczOEZGRCAvKiBG
aWx0ZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMw
MEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMv
RkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0v
ZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDk4NzFhMDVkZTRjMy4uMzY3NzJiMGYzZWE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgRkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggZmJkNTk1NWJhZjkwLi41NjQ0ZmVh
N2JmNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcApAQCAtNTksNyArNTksNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0g
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQm
IGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAKaW5kZXggNTVjZDZhMTQxMDgwLi5iNjY0ZjI5ZTY0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cApAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOThmNmMxMjY4NDViLi44OGU1OWY1MDg5NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVk
VGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKICAgICBJbnRSZWN0
IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAg
IGluLT5jb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgdW5zaWduZWQgZGVzdGluYXRp
b25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwogICAg
IHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwogICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCA0NmYy
NmE5MjFiYjMuLjJiODc5MjQwZTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0ICs4Nyw2
IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewot
ICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAg
ICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25l
ZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9
OwpAQCAtMjI5LDE0ICsyMjEsMTQgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVj
dCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QykgewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAg
ICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiAgICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAg
ICAgIHJldHVybjsKIApAQCAtMjQ3LDcgKzIzOSw3IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmlu
ZGV4IDFjM2E3M2VlNzk5MS4uMTQzNThkYzNjZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01NiwxNCAr
NTYsMTEgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQog
ICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6CiAgICAgRkVDb21wb3Np
dGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKKyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDOyB9CiAKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IGM3ZjYxMDhmZjg5Mi4uNjgxNzQ0ZWE0MjQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gdW5wcmVtdWx0aXBsaWVk
UmVzdWx0KCkgOiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTM3Nyw5ICszNzcsOSBAQCB2b2lkIEZF
Q29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogCiAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwogICAgIGlmICht
X3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAg
ICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBlbHNlCi0gICAgICAg
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9
IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOwogICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IGQ2YTM1ZmVhMDk3Yi4uNjU2NjNk
OTI5NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtOTgsMTggKzk4LDE4IEBA
IHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5L
Tk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04p
OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11
bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5nZXRQcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZh
bHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVk
IGNvbG9yIHZhbHVlcy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGRpc3BsYWNlbWVudElt
YWdlID0gaW4yLT5nZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsK
ICAgICAKICAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYzNjZTRlMzZlMjQ3Li42YTk2Y2E5OTA5
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBGRURyb3BTaGFk
b3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCA4YmQ5ZTM1YzkxYWEuLmM1NzBkOWM1NWVm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFj
aXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKIAogdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IGQyODA4ZmVkYTFmYS4uMTM2ZjY4YWFm
NzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
IHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgp
OwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAppbmRleCA5MTE4YTliZjI1MmUuLmZiZDUwMzkwMmJjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
cHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCA0ODljMmZmYmExY2YuLmZiZjUwMzkwOWZj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZm
ZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA4OWFmMmRlZDY2MjMu
LjVmNzRjZmQ3NGZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1
bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVy
YXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNvdXJj
ZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+
Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcAppbmRleCA4OTA5Y2JiODE5MmYuLjA2NTAwMWUwMGI1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAg
LTY3LDcgKzY3LDcgQEAgdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CmluZGV4IGI3NWUyZjY1N2U3Yi4uZTc0YTc4YzllMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00Niw3ICs0Niw3
IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAvLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91
bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNl
LgogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4
IDNjZjRmZDFmY2QwNy4uZDgyNTMxNjE3NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC0zOTUs
NyArMzk1LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAppbmRleCBmYzk2ZDEzNTE5NTQuLmUzMzMwYTFmNDY0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtMzUsMTQgKzM0LDYgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRl
IDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKQpAQCAt
MTgyLDQ2NSArMTczLDk3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAg
ICBpZiAoIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKSB7CisgICAgICAg
IGZvciAoYXV0byYgaW4gOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgICAgIGluLT5jb3JyZWN0
UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgfQotICAgIAorCisgICAgaWYgKCFj
cmVhdGVSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNw
ZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KICAgICBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoZmlsdGVyKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpjcmVhdGVSZXN1
bHQoKQogewotICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBv
dGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdl
QXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3Qq
IHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3Ro
ID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVz
IHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlM
ZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBp
eGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4
ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4
MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2
bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAg
ICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZh
bFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxE
YXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAg
ICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5
TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFy
cmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2lu
ZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAg
d2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBi
eXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAg
ICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhl
IHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0
YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJ
bmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KKyAgICBtX2Zp
bHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRDb2xvclNwYWNlKTsK
KyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFy
UmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgIG1fZmlsdGVySW1hZ2UgPSBudWxscHRy
OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIHsKICAg
ICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVj
dCBoYXMKICAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFu
IGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVz
dWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZl
Y3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKKyAgICBjbGVhclJlc3Vs
dCgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgIGVm
ZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KICAgICBpZiAoIWhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLQotICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVz
dWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVy
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5p
bWFnZUJ1ZmZlcigpOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorUGl4ZWxCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6dW5wcmVtdWx0aXBsaWVkUmVzdWx0KCkKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUo
cmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHNjYWxlZFNpemUpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYg
KCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9y
U3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIHJldHVybiBtX2ZpbHRlckltYWdl
LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwog
fQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGll
ZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRp
cGxpZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwot
ICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisg
ICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJl
dHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVk
UmVjdChyZWN0KTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFu
c3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAg
ICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRS
ZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgp
ID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24u
ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4g
aWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAo
c2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxl
ZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49
IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhP
cmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3Jp
Z2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0g
MDsKLSAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVu
ZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGlu
dCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlP
cmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxl
ZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQot
ICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUg
PSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNj
YWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0
aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAq
IDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5
T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAg
d2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVs
LCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGlu
YXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0g
ICAgICAgICsreU9yaWdpbjsKLSAgICB9CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogfQogCi1zdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpnZXRVbnBy
ZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3Jj
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRl
czsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkp
OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUu
d2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0
LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1
aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4
X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUo
KTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEo
KTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3Vy
Y2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAg
ICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBz
cmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEo
KSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6
ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRl
c3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29u
c3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1
aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZh
bHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQg
YWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0g
YWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVy
Zm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRv
IGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwg
cGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
YnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAg
ICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2Us
ICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3Jt
YXQpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRh
cmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
cmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVy
Q29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwg
dGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRl
ZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBp
bWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFy
Z2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgcmVjdCk7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3Jl
ZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1
dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBBU1NFUlQo
aGFzUmVzdWx0KCkpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsK
IH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAog
ewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24n
dCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxC
dWZmZXIpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgbV9maWx0ZXJJ
bWFnZS0+Y29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8
IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
ICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBj
b252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsK
LSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAg
ICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAg
ICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9
OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0
aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNw
YWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyht
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAg
ICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb24sIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJl
bXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwot
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIg
PDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkg
ewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZl
ci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAg
ICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVz
dWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50
UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7CisgICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11
bHRpcGxpZWRQaXhlbHMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VC
eXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVj
dCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xh
bXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9y
U3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZp
bHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5h
bWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBl
IGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAg
ICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICBQ
aXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0
LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0K
LQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAl
cyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFj
dGVyczgoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXpl
IHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNp
emUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotYm9vbCBG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQot
ewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3
ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAv
LyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNl
IGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBt
YW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
JiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQot
ICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9u
IG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPmNvcnJlY3RQcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXIoKTsKKyAgICAKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlv
bkNvbG9yU3BhY2UpCiB7Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3Bh
Y2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25D
b2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRp
YWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZwotICAgIC8v
IGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVk
IGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
ZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZTsKLQotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6
Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7
Ci0jZW5kaWYKKyAgICBtX2ZpbHRlckltYWdlLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGlu
YXRpb25Db2xvclNwYWNlKTsKIH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggZTUwZWJmNDRhOTI3Li40OTc0
MjE4YmUwNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2Uu
aCIKICNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3RFeHRlbnQuaCIKQEAgLTQ4LDI3ICs0OSwyOSBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCiBjbGFzcyBGaWx0ZXJFZmZl
Y3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgorICAgIGJvb2wgY3JlYXRlUmVz
dWx0KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1
bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9
IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQp
OworICAgIFBpeGVsQnVmZmVyKiB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsKKyAgICBQaXhlbEJ1
ZmZlciogcHJlbXVsdGlwbGllZFJlc3VsdCgpOworCisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisKKyAg
ICB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisK
KyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKwogICAgIEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7
IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZl
Y3RzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBj
b25zdDsKICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlm
IHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
OwotICAgIH0KLQogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgCkBAIC04NywxMSArOTAsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAg
Ly8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3Vs
dCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBl
bnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCBy
ZXN1bHQuCi0gICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIg
bmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKTsKIAogICAgIGVudW0gY2xhc3MgUmVwcmVzZW50
YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CkBAIC0xNDMsMzUgKzE0MSwxNiBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogICAgIAotICAg
IEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBm
b3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxp
ZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZv
aWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSA9IDA7CiAKLSAgICB2b2lkIGNv
cHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29w
eUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4p
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKLQogICAgIEZpbHRlckVmZmVjdFZl
Y3RvciBtX2lucHV0RWZmZWN0czsKIAotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1
ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsK
IAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAK
aW5kZXggOGIxMzc4OTE3OTFmLi45ZTgwYmQ2MWRhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0x
ICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwog
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNs
dWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRl
IDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQorewor
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJbWFnZShsb2dpY2FsU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlckltYWdl
OjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkK
KyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7
Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlm
IChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKwor
ICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1f
cmVuZGVyaW5nTW9kZSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xv
Z2ljYWxTaXplKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBp
eGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpLCByZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VC
dWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQor
ICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0
ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgp
KTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXpl
LndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVz
dC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3Qg
dWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRT
aXplLmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVz
dGluYXRpb24uZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewor
ICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
YWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0p
ICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVT
RShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICog
NDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJv
d0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
Pihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0Lndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
I2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgp
OworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbnB1dFNpemUuYXJlYSgpICogNCk7CisgICAgdWludDhfdCogZGVzdGluYXRp
b25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBv
bmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Cisg
ICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAv
IGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRp
ZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIg
PSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JT
cGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIo
Zm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAg
IGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNj
YWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZv
cm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBpZiAoYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZl
ciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCkpCisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVs
QnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
SWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAg
ICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCks
IHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIH0KKworICAgIHJldHVybiAm
cGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0
ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsK
KyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7
CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNo
ZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBp
ZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwg
YWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsK
K30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBj
b25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hl
dGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24K
KyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9y
IHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRl
ciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1f
Y29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VEX1BB
UkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIEZp
bHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNjYWxlZFJlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9s
b2dpY2FsU2l6ZSk7CisgICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJs
YWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlmIChzY2Fs
ZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgp
ID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAs
IGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVj
dCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0
Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkg
Pj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdpbiA9IHNj
YWxlZFJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4gPCAwKSB7
CisgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOworICAgIH0K
KyAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgo
KTsKKworICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0g
MDsKKyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAg
ICAgICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZ
KCk7CisgICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlF
bmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0g
eE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53
aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lk
dGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRh
dGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGlsZSAoeU9y
aWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBp
eGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5s
aW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAgICAgKyt5
T3JpZ2luOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1h
Z2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNs
YW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAv
LyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQg
dXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29u
dmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24g
aGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8g
YW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBh
bHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJu
IGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQor
CitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICBy
ZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENy
ZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgorICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxC
dWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VC
dWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwordm9pZCBGaWx0ZXJJ
bWFnZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAg
YXV0byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KSA/ICZw
aXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAg
IGlmICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVy
IGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0
byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICAgICAgICAg
IEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkg
fTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENv
bnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsICpjb2xv
clNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4
ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsQnVmZmVy
ID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghcGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29u
dmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIs
IGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhj
b252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBw
cmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQg
cGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFy
cmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3Ro
KCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21w
bGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYg
SEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0
KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5
TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRz
IHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxz
ID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBd
ID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsK
KyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVs
cy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhl
bHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMu
dmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7
CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0
YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAg
ICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAg
ICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGlu
ZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+
PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAg
ICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2gg
Y29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhl
bERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAg
KytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQor
ICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5z
Zm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNp
ZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRl
cm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNv
bG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIg
Y29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9y
dCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNm
b3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JT
cGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0Owor
ICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaAppbmRleCA4YjEzNzg5MTc5MWYu
LjRjYjVhMWYwZjA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMSArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwogCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpOworCisgICAgRmxvYXRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsU2l6ZTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBp
eGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2
b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcml2
YXRlOgorICAgIEZpbHRlckltYWdlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQg
Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xv
clNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsK
KyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRp
b25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAg
UmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IGUxMDRhOGQyMDg2MC4uYTU5NmQ0
OGU0ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFNvdXJjZUFs
cGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIAog
dm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKaW5kZXggZTcyZjBmMGI3OGI5Li5kNjQ1YWE5MjUwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiB2b2lkIFNvdXJjZUdyYXBoaWM6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
aW5kZXggYmU2YWY3MzM1MmExLi41NmRkMWMyMDVmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0y
MzcsNyArMjM3LDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZp
bHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKmZpbHRl
ckRhdGEuZmlsdGVyKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCA0ZDY5YTgw
ZDZiMjUuLjIxOTJlODE1YjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBGRUltYWdl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgLy8gRkVJ
bWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkK
ICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443976</attachid>
            <date>2021-11-11 11:07:00 -0800</date>
            <delta_ts>2021-11-11 13:05:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211111110657.patch</filename>
            <type>text/plain</type>
            <size>78921</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZlOWQxZWFhM2IzODY0
ZTU1N2NiM2RhOWU2N2M1NTJjZWFiM2E0Ny4uYWEyNGQ1MzM3ZmViOGFmNjI3NGYxYmQ2MGYyNjAz
ZThmNDQzM2EzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAyMS0xMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBpbnRlZ3JhdGluZworICAgICAg
ICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHkgYW5kIHNpbXBsaWZ5aW5nIHRoZSBnZW9tZXRyeSBj
YWxjdWxhdGlvbi4KKworICAgICAgICBJbnN0ZWFkIG9mIGhhdmluZyB0aHJlZSB3YXlzIHRvIGNy
ZWF0ZSB0aGUgcmVzdWx0IG9mIGEgRmlsdGVyRWZmZWN0LCB0aGVyZQorICAgICAgICB3aWxsIGJl
IG9uZSB3YXkgd2hpY2ggaXMgYnkgY2FsbGluZyBGaWx0ZXJJbWFnZTo6Y3JlYXRlKCkuIFRoaXMg
Y2FsbCB3aWxsCisgICAgICAgIG5vdCBjcmVhdGUgYSBjb25jcmV0ZSByZXN1bHQuIEJ1dCByZXF1
ZXN0aW5nIHRoZSBJbWFnZUJ1ZmZlciBvciBhIFBpeGVsQnVmZmVyCisgICAgICAgIGZyb20gRmls
dGVySW1hZ2Ugd2lsbCBtYWtlIHRoaXMgY3JlYXRpb24gaGFwcGVucy4KKworICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
aDoKKyAgICAgICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNl
ZCBieSB0aGUgb3Bwb3NpdGUgCisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGll
ZFBpeGVscygpLiBDb3JyZWN0aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3
aWxsIGJlIGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVSZXN1bHQpOgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFy
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVj
dXJzaXZlKToKKyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxs
aWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1
bnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
cmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0
VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5w
cmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZElt
YWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRp
cGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBs
b2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1vdmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVs
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJS
ZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
SW1hZ2U6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6YWJzb2x1dGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwogMjAyMS0xMS0xMCAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NT
RmlsdGVyIGJlIGEgY29tcG9zaXRlIG9mIEZpbHRlckZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCA4YTExNGExMjM4ZDRmNjgxODg0NmYyMWMyZGIwYWMwMzAzYjFlYjI5Li5iMDdhMjE0ODU0MWJj
NTg2ZDUwNGJiMTE2Nzc5MjFjZjgxYmQwZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA5Myw2ICsy
MDkzLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI5OWE4ODY2MGYxZWIw
MjJjYmQ4YjRlZGMyMzFiMjI5MDliZGExNDQuLjU1ODg2ODQ5MjBiYjI2ZTM4N2E3ZWQ5ZDY4ODZl
MTMwNzM3ZWY1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODQ1LDYgKzEwODQ1LDggQEAKIAkJNzIxQjQ5NkYyNTEyQUMw
NDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFC
NDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI0MzVFRjUy
NzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZp
bHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNB
N0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVu
ZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MjAsMTEgKzE4OTIyLDExIEBACiAJCTFB
NTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAvKiBicmlkZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBqc2Mg
Ki8sCiAJCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJCQkJNTk5RTc1
OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oICovLAogCQkJCTFBNzFENTc5MEYzMzgxOTAw
MEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNwcCAqLywKIAkJCQkxQTcxRDU3QTBGMzM4MTkwMDBG
OUNFNEUgLyogSWRlbnRpZmllclJlcC5oICovLAorCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlF
OCAvKiBqc2MgKi8sCiAJCQkJMUE1NjlDRUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJy
YXkuY3BwICovLAogCQkJCTFBNTY5Q0YwMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5
LmggKi8sCiAJCQkJMUE1NjlDRjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNw
cCAqLywKQEAgLTI1ODg5LDYgKzI1ODkxLDggQEAKIAkJCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2
NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBD
NTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1
NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8q
IEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBj
ZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uZDliZDViY2I5NzZjNjEwNTdhZmFi
OGUwMTA5ZjQ5YjM2YmI1N2E4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEx
MiwxNyArMTEyLDE3IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QSA9IGlu
LT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5QSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8g
c291cmNlUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdp
bmdSZWN0KTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5nZXRQcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKICAgICB1bnNpZ25lZCBzb3VyY2VQaXhl
bEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwogICAgIEFTU0VSVChw
aXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApp
bmRleCBiNGNhZWQ0NTU1NzJmYzg1Y2VkOGE0ZjIzMWM5ZjgzMDI3YmFmYjBiLi40OTc1MGZkYThj
NmQyN2NjNGI0NWQzNzllNjFmYjUzYjVlNDNjZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTU5LDcgKzU5LDcg
QEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFw
aGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggYTc5MWJkNmQzMWZkNzUwNGExMTMyN2YxZDQxYWNiZDNhNDll
MTk1Mi4uMDIxYmQ1MmM3MzRlYjcyOTU3NzFiNmUwYjA2MjQ0NjhkZDkwNTgxNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGNlMDBjYzE5ODI5NzliNDA5NDA0ZDVjZmRjYzAz
YTZlZDMzNWMzYjIuLjE2ZmQ5OGExZGViZTU4MTFmMzg0YjJhODRkZDgxOTRmOTE3ZDMyNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIwLDcgKzEy
MCw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
ICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUs
IGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+Y29weVVucHJlbXVsdGlwbGllZFJlc3Vs
dChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNl
KCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25Q
aXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggZTBiZWYzMDc0MDVmZjIzM2U4YTJhZmI1Y2JlYzhkNTQ4
ZDIyNzgwOC4uNWRhNmU4ZWEyNTcyMTk1NDdlZTg4YzFiMzQ3Y2M2ZGUzMDY5YWFkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKQEAgLTg3LDE0ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZs
b2F0IGs0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0
RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFBy
ZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1w
Qnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwpAQCAtMjI5LDE0ICsyMjEsMTQgQEAgdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
ICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LT5kYXRhKCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
ICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFy
cmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDcsNyArMjM5LDcgQEAgdm9pZCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NDb250
ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApp
bmRleCAzOTIzN2ZlYjEyN2FkMWZmMWRlMjE4MzRiZDdiMmI3MzdmYWFmMzJkLi44ZGI0MDBhMmNm
YWM4ZTY3YmJkYWQwM2RiZDk1NWJlY2YyNWVhNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01OCwxNiAr
NTgsMTUgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQog
ICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6CiAgICAgRkVDb21wb3Np
dGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIGZsb2F0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
OwogCisgICAgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhN
RVRJQzsgfQorCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKwog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZv
aWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCBlODZm
MTI5YzU0YjFkOGZkOGVkOTI5NDZlMmNlMWI2OTgyMzAzYmVkLi5lYTAwM2RjYTkxNGE2MDlhY2U1
ZGEzYzkwNjNjZTJjYTcxZTZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2
OSw3ICszNjksNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyB1bnBy
ZW11bHRpcGxpZWRSZXN1bHQoKSA6IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzc5LDkgKzM3OSw5
IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKICAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAg
ICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgZWxzZQotICAgICAgICBz
b3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBp
bi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAyNGE0NjI2YzZhMWM4MWZjNzc0ZGE2
MjM3NmMxMjliZDg2ZDcxZTI5Li5jZGYzYzhhYzE1ZTM1ZmY1NTMyNzYyMzc4YTIyNGM2ZDAxNjdl
MjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtOTksMTggKzk5LDE4IEBAIHZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJU
KG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dElt
YWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBh
dXRvIGlucHV0SW1hZ2UgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2lu
Z1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBU
aGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJl
IHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0
byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3
aW5nUmVjdCk7CisgICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+Z2V0VW5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCiAgICAgaWYgKCFpbnB1dElt
YWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cu
Y3BwCmluZGV4IDUxYWQyZjg1ZjJjMjdhNmVlNTA3NGYyYzE2MWViOTE0NjhjOWVjMjYuLmFhZTQ0
OTcyYTNmOTU3OTk3ZGVmMmY2YTk5ZDgzZjMxNDg5YzY3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
cmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYTc4NDIxOTY3NGUx
YWU5Nzk5MzQ0MzhkYTU0YTFhNzFjOTgwNDg0Mi4uODlmZmIyYTllODIzYTk5NzM5OTZmZGNlZjAw
NmJmZWMzMzIzYjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgRkVGbG9vZDo6
c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKIAogdm9pZCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggOGU0NmM1MDI2ZmU2NWM3NTU5NjM3NzVk
MGJlNjk5NzAyZDQ4ZjI1NS4uMDdmZTdkNzlhZTY2ZTAwZDc1MzY2NTkzOWU3YzEyYmViZWY3Mzc2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDY1OWIx
MDU1ZjYxZWFhYmM1ZjI5OTkxZGEwZGExYTU4NTA3MWFlOTIuLjBlMTcyYjFjM2I0ZGE4OTQ0OGUx
ZTk1MzM4NmRhNjdjNDU4NWYxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBA
IHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCA2OTdk
MmUxNWNjYmYxYWVmZWQwZTg5ZmRhMzRlNzAzMjkzMDdmNzNjLi5hYjZlNDdiMGZkZjVlMzMwYjE5
YjdmYTJiYjEzYzM1Zjg5M2FlY2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBG
RU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHVuc2lnbmVkIHNpemUgPSBudW1i
ZXJPZkVmZmVjdElucHV0cygpOwogICAgIEFTU0VSVChzaXplID4gMCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMWIwZGFl
YjBkYjU2ZTgxODkyMDE4YTMwNzUwNmYzNTc3MWQ2OGMwMC4uMTUzN2JjYmUzMTdmNGU0NTg4YjY2
MTEyZWRmOWJhNDNmYjhjNDA5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjQ0LDcgKzI0NCw3
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1OSw3ICsy
NTksNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBh
dXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjhjYmM2MGE0NDdmMzY5YmNjZWRhMDA1YzkxNzViMzFi
MThkOGY2Li5iMGYzMjhkY2MyMGNlNGU4N2M3N2NmODgzM2ZkNWI3MmQyODhhNmZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDNlNTBm
YjZjMDBlY2YzODM5ODVjNjI5Nzk4NGY2ZTk3ODVjZTQyNGUuLjk2MDRhMWU5ZjI5N2RjNDk2NzVi
YzNlYWMzZWUxODVhNzA4MjJhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBGRVRp
bGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAvLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhp
cyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNv
cnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGEyZTdhZWMzNGQ2YTk1NTQ0YTA3MDY5N2RhNTc4ZTE4
MzU2MGRiNWMuLjk0Y2YxYTIxMTUyOTEyZjk2OGM3YjVkZDc5MjdkNTA5ZWM5MmI3NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHAKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKIAogdm9pZCBG
RVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gdW5wcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAppbmRleCA2ZWZmYzhmMTdkZmJjNjU0ZDVlM2QyNzFkOTA2MzA0ZmMzNWQ2ZmZk
Li5hMTZmYmYxYjQxMzczOTg2NTYwMTYyMjM5ZjFjOWEzZWRhODU5NTg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCkBAIC0yNywyMiArMjcsMTEgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0
ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUpCkBAIC0xNjEsNDcwICsxNTAsMTA2
IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiAgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7
CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4g
IGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwg
IlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBt
YXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIg
PDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxu
ICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzCisgICAgICAgIDw8ICJc
biAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3Vi
cmVnaW9uCisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRl
UGFpbnRSZWN0CisgICAgICAgIDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0
UmVjdAorICAgICAgICA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwogCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Cisg
ICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgICAgICBpbi0+Y29ycmVj
dFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgIH0KLSAgICAKKworICAgIGlmICgh
Y3JlYXRlUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEFkZCBwbGF0Zm9ybSBz
cGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCiAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpCitib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KCkK
IHsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhl
bERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGlt
YWdlQXJyYXkubGVuZ3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIg
cGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3Ro
ICUgNCkpOwotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFy
cmF5TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0
YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRf
dCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRl
ZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5Q
aXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFf
dTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAg
ICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0s
IHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwg
c2l4dGVlblBpeGVscyk7Ci0gICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0g
d2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0
aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxw
aGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxl
ICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBp
biBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAg
IC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhl
bCBsb2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBh
OwotICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVt
ZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgbV9maWx0ZXJJ
bWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdCwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXN1bHRDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gbV9m
aWx0ZXJJbWFnZTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKIHsKLSAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
c3RkOjpudWxsb3B0OworICAgIG1fZmlsdGVySW1hZ2UgPSBudWxscHRyOwogfQogCiB2b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIHsKLSAgICAvLyBDbGVhciBhbGwg
cmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBh
IHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0
ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1
bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgp
LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKKyAgICBjbGVhclJlc3VsdCgpOworICAgIGZvciAo
YXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVm
ZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1
ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmltYWdlQnVmZmVyKCk7CiB9CiAK
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1
bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxp
ZWRSZXN1bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAg
IGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0
OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAg
aWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVs
dGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IHBpeGVsQXJyYXk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CiB9CiAKLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KQorUGl4ZWxCdWZmZXIqIEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgYXV0byBjaGVja2VkQXJl
YSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNr
ZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0
byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Y2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgq
cGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIElu
dFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBu
b3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lngo
KSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0
aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5v
dCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8
PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3Qu
eCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAg
IHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQg
eEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAg
IGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBp
ZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9y
aWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAg
aWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2Fs
ZWRQYWludFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikg
KiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICog
NDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgo
eURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlF
bmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXpl
KTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAg
ICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQot
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0
aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRp
cmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2Rl
KCksIDEsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1
dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1hdCk7CisgICAg
cmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJF
ZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29u
c3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1h
dCkKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRp
cGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRv
bmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkp
OwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Ig
c3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAg
ICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgMSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRl
cm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAg
IGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwg
cmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFG
b3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVy
biBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7CisgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNw
YWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRv
RGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJl
Y3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewot
ICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBh
bmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJS
ZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0
Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIGRlc3RSZWN0KTsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIHJldHVybiBt
X2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAogewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRh
IHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5h
dGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIpOwotICAgIGlmICghY29udmVydGVk
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0
ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7CisgICAgbV9maWx0ZXJJbWFnZS0+Y29weVBpeGVsQnVmZmVyKGRlc3Rp
bmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QsIGNv
bG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQordm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUp
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxC
dWZmZXIoZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
K3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCkK
IHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBj
b252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwot
Ci0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCku
Y29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQs
IGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWlu
Z0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5h
dGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Cisg
ICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywg
IkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRl
ck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53
aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBP
bmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkp
OwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJp
bmdNb2RlKCksIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMpOwotCi0g
ICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jl
c3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAg
aWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYg
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExP
RyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkg
b25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNv
bHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVz
dWx0U2l6ZSkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xv
clNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252
ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAg
IC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0
dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3Rp
bmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBj
b252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgbV9maWx0
ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwogfQogCiB2b2lkIEZp
bHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNF
RF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3Vs
dCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAg
aWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNh
biBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNp
b24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRo
ZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRy
YW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1
bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiBUZXh0U3RyZWFtJiBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRl
eCA2Njc2MDBkMzAyYzhmYzliNWE4ZjRmMWZjOGYwYzU2OWNiZTJhN2IyLi5mNGNiOTg3ZmFjM2Y4
ODg3NzIzNDQwYmNjYTM0OWU1ZDJmZDgzMjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTIyLDE2ICsy
MiwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCIKICNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGaWx0
ZXJGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDgsMjYg
KzQyLDI4IEBAIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZl
Y3RWZWN0b3I7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7
CiBwdWJsaWM6CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKICAgICB2b2lkIGNsZWFyUmVzdWx0
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgUGl4ZWxCdWZmZXIqIHVucHJlbXVs
dGlwbGllZFJlc3VsdCgpOworICAgIFBpeGVsQnVmZmVyKiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7
CisKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2U7IH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlw
bGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxp
ZWRSZXN1bHRJZk5lZWRlZCgpOworICAgIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlu
cHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElu
cHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQogICAgIAotICAg
IGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAot
ICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKICAgICAKQEAgLTg2LDExICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgYXBwbHkoKTsKIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNl
c3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5w
dXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29t
cG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0
dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9Ci0KICAgICB2aXJ0dWFs
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIAogICAgIGVudW0gY2xhc3MgUmVw
cmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CkBAIC0xNDQsMzcgKzEz
NSwxOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwg
VHlwZSk7Ci0gICAgCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3
aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAg
ICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxw
aGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEgcHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNo
ZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBuZWNlc3NhcnkuCi0g
ICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOworICAgIHZpcnR1YWwgYm9v
bCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKIAogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgPSAwOwogCi0gICAgdm9p
ZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lk
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCi0KICAgICBGaWx0ZXImIG1f
ZmlsdGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAotICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxG
aWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50
UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzBiNWU3MWU0ZjAzNWI1MWVh
OTBiMTllNzBkNTg2MDM0ZjU4YzJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0wLDAgKzEsMzkx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFy
bV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2Vs
ZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
UHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEludFJlY3QmIGFic29s
dXRlSW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZpbHRlckltYWdlKGFic29sdXRlSW1hZ2VSZWN0LCByZW5kZXJpbmdNb2Rl
LCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBJbnRS
ZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgOiBtX2Fic29sdXRlSW1h
Z2VSZWN0KGFic29sdXRlSW1hZ2VSZWN0KQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW1hZ2VCdWZm
ZXIqIEZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworCisgICAgbV9pbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCksIG1fcmVu
ZGVyaW5nTW9kZSwgMSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0
IHJlY3QgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisKKyAgICBpZiAocGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkK
KyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCksIHJlY3QpOworICAgIGVs
c2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVs
QnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwg
cmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZv
aWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNp
emUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRT
aXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRo
ID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQo
KTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0
OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9
IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAg
ZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsK
KworICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBz
b3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCAr
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnB1dFNpemUuYXJlYSgpICogNCk7CisgICAgdWludDhf
dCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAgICB3aGls
ZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNv
bXBvbmVudFszXTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkg
KiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9
IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9
CisKK3N0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJv
d0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7
CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMu
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdklt
YWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAg
ICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
cm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGlu
YXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0g
c291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkg
KiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRh
dGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBh
bHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBo
YTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50
Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBh
bHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBG
aWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCkKK3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFG
b3JtYXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZl
ci52YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFn
ZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhlbEJ1ZmZlciA9
IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgeyB9LCBtX2Fic29sdXRlSW1h
Z2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cisg
ICAgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUo
KSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNp
emUpKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQs
IGxvZ2ljYWxTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0g
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KSkKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoc291cmNlUGl4ZWxCdWZm
ZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9naWNhbFNpemUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAg
ICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCksIHBp
eGVsQnVmZmVyLT5kYXRhKCksIGxvZ2ljYWxTaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gJnBp
eGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVy
SW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2l6ZSkpOworCisgICAgYXV0byBj
aGVja2VkQXJlYSA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKGNo
ZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3Jt
YXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9v
bCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAorewor
I2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBu
ZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBX
ZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlz
IGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5p
cHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFj
ZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBj
b252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9y
U3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRlckltYWdl
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSk7CisKKyAg
ICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYg
bm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAocmVjdC54KCkgPCAw
IHx8IHJlY3QueSgpIDwgMCB8fCByZWN0Lm1heFgoKSA+IGxvZ2ljYWxTaXplLndpZHRoKCkgfHwg
cmVjdC5tYXhZKCkgPiBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3Rp
bmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkg
cmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisg
ICAgaWYgKHJlY3QubWF4WCgpIDw9IDAgfHwgcmVjdC5tYXhZKCkgPD0gMCB8fCByZWN0LngoKSA+
PSBsb2dpY2FsU2l6ZS53aWR0aCgpIHx8IHJlY3QueSgpID49IGxvZ2ljYWxTaXplLmhlaWdodCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOworICAgIGlu
dCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0ID0gLXhP
cmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9IHJlY3Qu
bWF4WCgpOworICAgIGlmICh4RW5kID4gbG9naWNhbFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVu
ZCA9IGxvZ2ljYWxTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHJlY3QueSgpOwor
ICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0
ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9
IHJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHlFbmQgPSBsb2dpY2FsU2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQg
LSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRo
KCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IGxvZ2ljYWxTaXplLndpZHRoKCkgKiA0
OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAo
KHlEZXN0ICogcmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCog
c291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogbG9naWNhbFNpemUud2lk
dGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOworICAgICAgICBzb3Vy
Y2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAgICAgKyt5T3JpZ2luOworICAgIH0KK30K
Kworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5k
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29u
dmVydGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8g
Q29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZy
b20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNv
bG9yU3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRl
ckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhl
bEJ1ZmZlci5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZm
ZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCwgMSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZl
ci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNw
YWNlKTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCit7CisgICAgYXV0byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklm
RXhpc3RzKGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52
YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYg
KHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewor
ICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlz
dHMoKSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUlt
YWdlUmVjdC5zaXplKCkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhl
bEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3Jt
YXQsIHJlY3QsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHBpeGVsQnVmZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0K
KworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
c3JjUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhw
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmls
dGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11
c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5v
dCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhl
bERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGlt
YWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIg
cGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3Ro
ICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFy
cmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0
YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRf
dCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRl
ZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5Q
aXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFf
dTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAg
ICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0s
IHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwg
c2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0g
d2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0
aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxw
aGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxl
ICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBp
biBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAg
IC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhl
bCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBh
OworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVt
ZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmls
dGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBh
ZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNl
bHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3Nh
cnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0
cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAg
aWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFn
ZUJ1ZmZlci0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xv
clNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0g
c3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxs
b3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNTBlYzZiNTVjNDdhZjQ2MjU2OWY3MTFjNzU2NzgyOTNjMGNkOGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
UGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVySW1hZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVh
dGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01vZGUsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgSW50UmVjdCBhYnNvbHV0ZUltYWdlUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3Q7IH0KKworICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQor
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZm
ZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVmZmVyKiBw
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVs
bG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHZvaWQg
Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVy
SW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50
UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworCisgICAgSW50
UmVjdCBtX2Fic29sdXRlSW1hZ2VSZWN0OworCisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmlu
Z01vZGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA5OTY5NDM3MjU3OTNlOTk2NDZmYzNl
NWIyMmFkMTUxZmJkZmRlOWNhLi4zMDRmYmI5NzdkODJmZDkxYmZjYmE4MjJiMzE4ZDJlMGRmMzNh
MWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFNvdXJjZUFscGhh
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAKIHZvaWQgU291cmNlQWxwaGE6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBp
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggZTEyM2RjZDhmZjIxZGRjNzczM2U1N2U1
MTVlZjMxMWU3YzkwMTU4MC4uNjQ0NTYzNDNjYmUwMzdlZTAzNjM0MjcxYTFhNjVjNGIzNTQ4NjY0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgU291cmNlR3Jh
cGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXImIGZpbHRlciA9IHRo
aXMtPmZpbHRlcigpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3Vy
Y2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IGYxMDM1MzM5ZWM0MWQ2ZTU0MGYyNWY2MWQx
ZGM1MmI1NjZkMGE5M2YuLjQzMTRhYzY2NGUxZmYzZjAzMzVjNzUwNTgwNmYxZTNkNDMwZDVlYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdy
YXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAgICAgICAg
ICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAg
bGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdFByZW11
bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApp
bmRleCA0NTQ0NWIyODEzNDM2ZGJlZjYzNTY5MTU4MWRlNjFkZWZhODIzYmFkLi5lNjk5N2QzM2Q1
ZDc0ZWQxZjEzMGYyY2NhNWNmZWVjNDE0NTI0MTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtNzksNyArNzksNyBAQCB2
b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgLy8gRkVJbWFnZSByZXN1
bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKICAgICBzZXRS
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIAotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAo
IXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443993</attachid>
            <date>2021-11-11 13:05:43 -0800</date>
            <delta_ts>2021-11-11 13:19:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211111130542.patch</filename>
            <type>text/plain</type>
            <size>87776</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I2MDM1ZTcxZDhjMGFm
ODE0YmM0NDNlOGI1YmI0ZGYzMjJlM2U0Yi4uZmQ5YTZkNzNiYmEyZGI5Y2YyMjEyZDE2ZmU3MzAx
ZTU4MmNiNWJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBpbnRlZ3JhdGluZworICAgICAg
ICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHkgYW5kIHNpbXBsaWZ5aW5nIHRoZSBnZW9tZXRyeSBj
YWxjdWxhdGlvbi4KKworICAgICAgICBJbnN0ZWFkIG9mIGhhdmluZyB0aHJlZSB3YXlzIHRvIGNy
ZWF0ZSB0aGUgcmVzdWx0IG9mIGEgRmlsdGVyRWZmZWN0LCB0aGVyZQorICAgICAgICB3aWxsIGJl
IG9uZSB3YXkgd2hpY2ggaXMgYnkgY2FsbGluZyBGaWx0ZXJJbWFnZTo6Y3JlYXRlKCkuIFRoaXMg
Y2FsbCB3aWxsCisgICAgICAgIG5vdCBjcmVhdGUgYSBjb25jcmV0ZSByZXN1bHQuIEJ1dCByZXF1
ZXN0aW5nIHRoZSBJbWFnZUJ1ZmZlciBvciBhIFBpeGVsQnVmZmVyCisgICAgICAgIGZyb20gRmls
dGVySW1hZ2Ugd2lsbCBtYWtlIHRoaXMgY3JlYXRpb24gaGFwcGVucy4KKworICAgICAgICBUaGUg
ZGVmYXVsdCBvZiB0aGUgb3BlcmF0aW5nIENvbG9yU3BhY2UgaXMgc1JHQi4gQnV0IGl0IHdpbGwg
YmUgc2V0IHRvIAorICAgICAgICBsaW5lYXJSR0IgaWYgdGhlIGNvbG9yIGludGVycG9sYXRpb24g
b2YgdGhlIGZpbHRlciBlZmZlY3QgZWxlbWVudCBpcyAKKyAgICAgICAgbGluZWFyUkdCLiBUaGUg
b25seSBleGNlcHRpb24gaXMgdGhlIEZFSW1hZ2Ugd2hvc2UgcmVzdWx0IGhhcyB0byBiZSBpbiAK
KyAgICAgICAgc1JHQiBhbHdheXMuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhl
IHJlc3VsdCBDb2xvclNwYWNlIGlzIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZS4KKyAgICAgICAg
VGhlIG9ubHkgZXhjZXB0aW9uIGlzIEZFRGlzcGxhY2VtZW50TWFwIHdob3NlIHJlc3VsdCBoYXMg
dG8gYmUgaW4gdGhlIAorICAgICAgICBzYW1lIGNvbG9yIG9mIHRoZSAnaW4nIGltYWdlLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgcmVxdWly
ZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0aGUgb3Bwb3NpdGUg
CisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpLiBDb3JyZWN0
aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJlIGRvbmUgYnkgRmls
dGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNl
bWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y3JlYXRlUmVzdWx0KToKKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSk6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUgYnkgbnVsbGlm
eWluZyBhIHNpbmdsZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5w
cmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmdldFVu
cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omdl
dFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3Bh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVy
dGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICBBbGwg
dGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB3YXMgbW92ZWQgdG8gRmlsdGVySW1hZ2UuY3Bw
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGll
ZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmFic29sdXRlSW1hZ2VS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMTEgIEFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gUmVzZXQgSW5saW5lVGV4dEl0ZW0gd2lk
dGggb24gYmlkaSBzcGxpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBjNjgwYThlNDk1ZWY5NzAyZTY5YjZi
OGYxNjQzNWZlYjMwM2YzMDEwLi4zZTRiMzE1MmVlYjU4ZDYzZmJiZDFmNjIzNTBlZTBkNmNhZWQy
ODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA5OCw2ICsyMDk4LDcgQEAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGZmMTQ4YjdjNGFiZDQ4MWM4OTYzZmQ1OTFmMGJkNDdlOGY0NmJm
MWQuLjE1MzIyMjYxYjZmZjQxM2VmZjAyM2YwZjM5Mjk2ZmM1ZjQzYjUyYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODUw
LDYgKzEwODUwLDggQEAKIAkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFw
QmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyog
SW1hZ2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMg
LyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3
RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRl
ckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5k
TWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5k
TWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTg5MzYsMTEgKzE4OTM4LDExIEBACiAJCTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAv
KiBicmlkZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBqc2MgKi8sCiAJCQkJMUE1NjlDRTIwRDdFMkI4
MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJCQkJNTk5RTc1OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJy
aWRnZS5oICovLAogCQkJCTFBNzFENTc5MEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVw
LmNwcCAqLywKIAkJCQkxQTcxRDU3QTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5o
ICovLAotCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBqc2MgKi8sCiAJCQkJMUE1NjlD
RUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuY3BwICovLAogCQkJCTFBNTY5Q0Yw
MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmggKi8sCiAJCQkJMUE1NjlDRjEwRDdF
MkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNwcCAqLywKQEAgLTI1OTExLDYgKzI1OTEz
LDggQEAKIAkJCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCAqLywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24u
Y3BwICovLAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5o
ICovLAorCQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8s
CisJCQkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJ
NDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJ
NDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5
RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA5OWIx
NjlhMzgxZTEyMjE3NzYwMmEyYTczMjMxYjQwYjFiOGVlOWJmLi4yYzU5NWNiMjllYzAxODA1NDc1
M2M3M2M1YzU2ZjE4ZWI3YTQxZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0K
ICAgICBlZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0
UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAg
ICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXgg
MjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uZDliZDViY2I5NzZjNjEw
NTdhZmFiOGUwMTA5ZjQ5YjM2YmI1N2E4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
QEAgLTExMiwxNyArMTEyLDE3IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5
QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0
byBzb3VyY2VQaXhlbEFycmF5QSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGF1dG8gc291cmNlUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5nZXRQcmVt
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKICAgICB1bnNpZ25lZCBzb3Vy
Y2VQaXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwogICAgIEFT
U0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcAppbmRleCBiNGNhZWQ0NTU1NzJmYzg1Y2VkOGE0ZjIzMWM5ZjgzMDI3YmFmYjBiLi40OTc1
MGZkYThjNmQyN2NjNGI0NWQzNzllNjFmYjUzYjVlNDNjZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTU5LDcg
KzU5LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAg
ICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggYTc5MWJkNmQzMWZkNzUwNGExMTMyN2YxZDQxYWNi
ZDNhNDllMTk1Mi4uMDIxYmQ1MmM3MzRlYjcyOTU3NzFiNmUwYjA2MjQ0NjhkZDkwNTgxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGNlMDBjYzE5ODI5NzliNDA5NDA0ZDVj
ZmRjYzAzYTZlZDMzNWMzYjIuLjE2ZmQ5OGExZGViZTU4MTFmMzg0YjJhODRkZDgxOTRmOTE3ZDMy
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxlLCBibHVl
VGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+Y29weVVucHJlbXVsdGlwbGll
ZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRl
c3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGlu
YXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0g
MDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0
ICs9IDQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggZTBiZWYzMDc0MDVmZjIzM2U4YTJhZmI1Y2Jl
YzhkNTQ4ZDIyNzgwOC4uNWRhNmU4ZWEyNTcyMTk1NDdlZTg4YzFiMzQ3Y2M2ZGUzMDY5YWFkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNl
dEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpj
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwpAQCAtMjI5LDE0ICsyMjEsMTQgQEAg
dm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZl
Y3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgaWYgKCFzb3VyY2VQ
aXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDcsNyArMjM5LDcgQEAgdm9p
ZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhp
Y3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuaAppbmRleCAzOTIzN2ZlYjEyN2FkMWZmMWRlMjE4MzRiZDdiMmI3MzdmYWFmMzJkLi44ZGI0
MDBhMmNmYWM4ZTY3YmJkYWQwM2RiZDk1NWJlY2YyNWVhNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01
OCwxNiArNTgsMTUgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6CiAgICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlOwogCisgICAgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQzsgfQorCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5s
aW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRl
eCBlODZmMTI5YzU0YjFkOGZkOGVkOTI5NDZlMmNlMWI2OTgyMzAzYmVkLi5lYTAwM2RjYTkxNGE2
MDlhY2U1ZGEzYzkwNjNjZTJjYTcxZTZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
QEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEg
PyB1bnByZW11bHRpcGxpZWRSZXN1bHQoKSA6IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzc5LDkg
KzM3OSw5IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
IAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKICAgICBp
ZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVs
dGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRVbnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgZWxzZQotICAg
ICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAyNGE0NjI2YzZhMWM4MWZj
Nzc0ZGE2MjM3NmMxMjliZDg2ZDcxZTI5Li43ZTQ3ZmNmZGQwZTgyMTJiYjE4MWJjNmUzNjVhZjdi
NTY4NTg3N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNjksMTMgKzY5LDEz
IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNw
YWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKCkgY29uc3QKIHsKICAg
ICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25s
eSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3Qg
YXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVz
dCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4KLSAgICAvLyBUaGUg
cmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxh
Y2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29s
b3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsKKyAgICAvLyBUaGUg
cmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxh
Y2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgorICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+cmVz
dWx0Q29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKQEAgLTk5
LDE4ICs5OSwxOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsK
ICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGll
ZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3
aW5nUmVjdCk7CisgICAgYXV0byBpbnB1dEltYWdlID0gaW4tPmdldFByZW11bHRpcGxpZWRSZXN1
bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZy
b20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3Ig
dmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJl
c3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBp
bjItPmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIAog
ICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBhYTViNmQ0NmJjNDY0ZmM2ZDA2MGQ4NmFm
NmJhZTBlZjA3ZWM5ZThkLi5jZTJkZWEyZTRlNzk2MDc5ZDM1YzQwNmU2ZDZjMmUwNTIxZGM3NDRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC00OCwxOSArNDgsMTkgQEAgcHVibGljOgog
ICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0
U2NhbGUoZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgog
ICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7
CiAKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNo
YW5uZWxTZWxlY3RvciAtIDE7IH0KKworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
cmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgdHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworCiAgICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIGludCB4Q2hhbm5lbElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotICAgIGludCB5
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVs
U2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1
MWFkMmY4NWYyYzI3YTZlZTUwNzRmMmMxNjFlYjkxNDY4YzllYzI2Li5hYWU0NDk3MmEzZjk1Nzk5
N2RlZjJmNmE5OWQ4M2YzMTQ4OWM2NzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGE3ODQyMTk2NzRlMWFlOTc5OTM0NDM4
ZGE1NGExYTcxYzk4MDQ4NDIuLjg5ZmZiMmE5ZTgyM2E5OTczOTk2ZmRjZWYwMDZiZmVjMzMyM2Iz
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcApAQCAtNjAsNyArNjAsNyBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAKIHZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmlu
ZGV4IDA4YTRlOTU5MzU4NWQyZmEwNzI2ODRkNDVkNWY4OTMwZjNhZWVmMGEuLmI0OWNkYWZjMGUw
N2FjOGQ5YjgyMTM2ODkxM2JmNmZlZTFkOTg1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC00MCw4ICs0MCw3IEBAIHB1
YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xv
ciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0
aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9m
IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZl
Y3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9
Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA4ZTQ2YzUwMjZmZTY1Yzc1NTk2Mzc3
NWQwYmU2OTk3MDJkNDhmMjU1Li4wN2ZlN2Q3OWFlNjZlMDBkNzUzNjY1OTM5ZTdjMTJiZWJlZjcz
NzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggNjU5
YjEwNTVmNjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uMGUxNzJiMWMzYjRkYTg5NDQ4
ZTFlOTUzMzg2ZGE2N2M0NTg1ZjEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC00NzUsNyArNDc1LDcg
QEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7CiAgICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDY5
N2QyZTE1Y2NiZjFhZWZlZDBlODlmZGEzNGU3MDMyOTMwN2Y3M2MuLmFiNmU0N2IwZmRmNWUzMzBi
MTliN2ZhMmJiMTNjMzVmODkzYWVjZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lk
IEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgdW5zaWduZWQgc2l6ZSA9IG51
bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKIAotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJl
c3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAxYjBk
YWViMGRiNTZlODE4OTIwMThhMzA3NTA2ZjM1NzcxZDY4YzAwLi4xNTM3YmNiZTMxN2Y0ZTQ1ODhi
NjYxMTJlZGY5YmE0M2ZiOGM0MDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNDQsNyArMjQ0
LDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjU5LDcg
KzI1OSw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAg
IGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAyOGNiYzYwYTQ0N2YzNjliY2NlZGEwMDVjOTE3NWIz
MWIxOGQ4ZjYuLmIwZjMyOGRjYzIwY2U0ZTg3Yzc3Y2Y4ODMzZmQ1YjcyZDI4OGE2ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggM2U1
MGZiNmMwMGVjZjM4Mzk4NWM2Mjk3OTg0ZjZlOTc4NWNlNDI0ZS4uOTYwNGExZTlmMjk3ZGM0OTY3
NWJjM2VhYzNlZTE4NWE3MDgyMmE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEZF
VGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBU
aGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGlu
Y29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZl
clJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYTJlN2FlYzM0ZDZhOTU1NDRhMDcwNjk3ZGE1Nzhl
MTgzNTYwZGI1Yy4uOTRjZjFhMjExNTI5MTJmOTY4YzdiNWRkNzkyN2Q1MDllYzkyYjc3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpm
aWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lk
IEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsK
ICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCmluZGV4IDZlZmZjOGYxN2RmYmM2NTRkNWUzZDI3MWQ5MDYzMDRmYzM1ZDZm
ZmQuLmU1MTk1NDYxNWU0M2YwNjJiMjk3YTljNDExZmU1MDEzM2I3ODk4NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKQEAgLTI3LDIyICsyNywxMSBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZp
bHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKQEAgLTE1OSw0NzIgKzE0OCwx
MDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAKICAgICBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdD
b2xvclNwYWNlKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZp
bHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6
XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAi
XG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVj
dCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0
ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBMT0dfV0lUSF9TVFJF
QU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbgorICAg
ICAgICA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMKKyAg
ICAgICAgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVV
bmNsaXBwZWRTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8
IG1fYWJzb2x1dGVQYWludFJlY3QKKyAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwg
bV9tYXhFZmZlY3RSZWN0CisgICAgICAgIDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQoKTsKKyAgICBpZiAoIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgaW4gOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgICAg
IGluLT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgfQotICAgIAor
CisgICAgaWYgKCFjcmVhdGVSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gQWRk
IHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGll
ci4KICAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpjcmVh
dGVSZXN1bHQoKQogewotICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1
bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8m
IGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5
TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3Vy
IGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVs
QXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAg
aWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVs
ID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAg
dWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsw
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
MV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4
ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgo
cGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsK
LSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhl
bEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBw
aXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBj
aGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5
Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhl
IDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAz
KTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1l
bnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBp
eGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KKyAg
ICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXN1bHRDb2xvclNwYWNlKCkpOworICAg
IHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7CiB9
CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogewotICAgIC8v
IENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhh
cwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJy
b25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQo
KTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOworICAgIGNsZWFyUmVzdWx0KCk7
CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgZWZmZWN0
LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQogICAgIGlmICghaGFzUmVzdWx0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgMSwgbV9yZXN1bHRDb2xvclNwYWNl
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1
ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZm
ZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVu
cHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6
ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRT
aXplKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxB
cnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsK
LSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKIH0KIAotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQo
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVz
dWx0KCkKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBhdXRv
IGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAg
ICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICgh
aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4
ZWxBcnJheTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQg
YmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCi0gICAgaWYgKHNj
YWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhY
KCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwg
MCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSBy
ZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJl
Y3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lngo
KSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4T3JpZ2luID0g
c2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAoeE9yaWdpbiA8IDAp
IHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdpbiA9IDA7Ci0gICAg
fQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7Ci0gICAgaWYgKHhFbmQgPiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKLSAgICBpbnQgeURlc3Qg
PSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwot
ICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1h
eFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
eUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKLQotICAgIGludCBzaXplID0gKHhFbmQg
LSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0
LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53
aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24u
ZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAq
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKLQotICAgIHdoaWxlICh5
T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNl
UGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2Nh
bmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOwotICAgICAgICAr
K3lPcmlnaW47Ci0gICAgfQorICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5waXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAotc3RhdGljIHZvaWQg
Y29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUp
Ci17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXpl
LndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsK
LSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVz
dC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQot
ICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3Vy
Y2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChp
bnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25l
bnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsx
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQg
Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6
ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBk
ZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwot
Ci0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0g
c291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQg
KyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRp
b25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBv
bmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0g
ICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAv
IGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRp
ZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdl
dENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTog
VXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lv
biBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBk
ZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25S
ZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29t
aW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIDEsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1
ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1hdCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0
QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEFscGhhRm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGly
ZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1w
ZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8v
IENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1
dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252
ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIDEsIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7
Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVu
IGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRC
dWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAg
IAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVk
QnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVm
ZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1f
aW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRh
dGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8g
Q29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFu
ZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0g
ICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJ
bWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0
UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0
IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0gICAgCi0gICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBp
bWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7
Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2Ug
cHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29w
eUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3Bh
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQo
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7
Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xv
clNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlu
cHV0U2l6ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNl
KTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICgh
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3Bh
Y2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUlt
YWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
cmVjdCk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBGaWx0ZXJFZmZlY3Q6OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVj
dCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRT
aXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLQotICAg
ICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9y
U3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1
dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBo
YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0g
ICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJz
LCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmls
dGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8v
IE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQo
KSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRl
cmluZ01vZGUoKSwgMSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwot
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIHJldHVybiBtX2ZpbHRl
ckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4m
IEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQordm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUo
KS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBy
ZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBB
U1NFUlQoaGFzUmVzdWx0KCkpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihk
ZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0
LCBjb2xvclNwYWNlKTsKIH0KIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKSBjb25zdAogewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVz
ICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0
ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQu
Ci0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUg
cmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6
ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIEFTU0VSVCho
YXNSZXN1bHQoKSk7CisgICAgbV9maWx0ZXJJbWFnZS0+Y29weVBpeGVsQnVmZmVyKGRlc3RpbmF0
aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNw
YWNlKTsKIH0KIAotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gZGVzdGlu
YXRpb25Db2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVk
UmVzdWx0SWZOZWVkZWQoKQogewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRl
dGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3
aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAvLyBBTkQg
MikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBkZXN0
aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNv
bG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lv
biBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmICghaGFzUmVzdWx0
KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
cigpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNp
ZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRl
cm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UK
LSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3Vs
dENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IElt
YWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNm
b3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdl
QnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwot
Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIG1fZmls
dGVySW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwog
fQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
CkBAIC02MzUsOCArMjU4LDggQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICBpZiAocmVw
cmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CiAgICAg
ICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKICAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7Ci0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9yU3BhY2Up
OwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRD
b2xvclNwYWNlKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFj
ZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVz
dWx0IGNvbG9yc3BhY2UiLCByZXN1bHRDb2xvclNwYWNlKCkpOwogICAgICAgICB0cyA8PCAiXG4i
IDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggNjY3
NjAwZDMwMmM4ZmM5YjVhOGY0ZjFmYzhmMGM1NjljYmUyYTdiMi4uMzVlNDhlZjJiZWI5M2Y0MWZi
YjZmOTVjMTU1MDQ5ZWY3MmVhOTVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNiArMjIsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgi
CiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVu
Y3Rpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ4LDI2ICs0Miwy
OCBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVj
dG9yOwogCiBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVi
bGljOgorICAgIGJvb2wgY3JlYXRlUmVzdWx0KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92
ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiAKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFBpeGVsQnVmZmVyKiB1bnByZW11bHRpcGxp
ZWRSZXN1bHQoKTsKKyAgICBQaXhlbEJ1ZmZlciogcHJlbXVsdGlwbGllZFJlc3VsdCgpOworCisg
ICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRS
ZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IHN0ZDo6bnVsbG9wdCk7CisKKyAgICB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQo
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICB2
b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9
IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVz
dWx0SWZOZWVkZWQoKTsKKyAgICAKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVm
ZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
KSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KICAgICAKLSAgICBpbmxp
bmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlv
biBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50
IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAg
ICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQogICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAg
ICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0
JikgY29uc3Q7CiAgICAgCkBAIC04NiwxMSArODIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFw
cGx5KCk7CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5
LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhv
ZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBh
bmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0
ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2
b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQotCiAgICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAKICAgICBlbnVtIGNsYXNzIFJlcHJlc2Vu
dGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwpAQCAtMTI4LDggKzExOSw4IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9
Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7
IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKQEAg
LTE0NCwzNyArMTM1LDE4IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVj
dChGaWx0ZXImLCBUeXBlKTsKLSAgICAKLSAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVl
cywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50
IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGll
ZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5l
Y2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAg
dmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7
CiAKLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENs
YW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKLQogICAg
IEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3Rz
OwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Cisg
ICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwogCiAgICAgSW50UmVjdCBtX2Fi
c29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMjAyLDEyICsxNzQsNyBAQCBwcml2YXRlOgogICAg
IC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4
cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgogICAgIGJvb2wg
bV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vs
c2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSB9OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMGI1ZTcxZTRmMDM1YjUxZWE5MGIxOWU3MGQ1ODYwMzRmNThjMmNkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpj
cmVhdGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQorewor
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlSW1hZ2VS
ZWN0LnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UoYWJzb2x1
dGVJbWFnZVJlY3QsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVySW1h
Z2U6OkZpbHRlckltYWdlKGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSkKKyAgICA6IG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCisgICAg
LCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xv
clNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIu
Z2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29s
dXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBtX2NvbG9yU3BhY2UsIFBp
eGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVj
dC5zaXplKCkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhl
bEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVm
ZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAg
ICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVz
OworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qu
cm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhf
dCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6
ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAg
ICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwor
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNl
bHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsK
KyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
Q29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25l
bnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAg
ICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBh
bHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQg
Kz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYK
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0
dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0g
cGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3Bh
Y2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygp
KSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
KG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNhbFNpemUpOworICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAo
YXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBsb2dpY2FsU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8mIHNvdXJjZVBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoc291
cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9naWNhbFNpemUp
OworICAgIH0KKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBz
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzaXplKSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJz
aW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8v
IEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJu
IGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKG1fYWJzb2x1
dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9u
IHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291
cmNlLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QubWF4WCgp
ID4gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0Lm1heFkoKSA+IGxvZ2ljYWxTaXplLmhlaWdo
dCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5s
ZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50
ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAocmVjdC5tYXhYKCkgPD0gMCB8fCByZWN0
Lm1heFkoKSA8PSAwIHx8IHJlY3QueCgpID49IGxvZ2ljYWxTaXplLndpZHRoKCkgfHwgcmVjdC55
KCkgPj0gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4
T3JpZ2luID0gcmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8
IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7Cisg
ICAgfQorICAgIGludCB4RW5kID0gcmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBsb2dpY2Fs
U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gbG9naWNhbFNpemUud2lkdGgoKTsKKworICAg
IGludCB5T3JpZ2luID0gcmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9y
aWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAgICAgeU9yaWdpbiA9
IDA7CisgICAgfQorICAgIGludCB5RW5kID0gcmVjdC5tYXhZKCk7CisgICAgaWYgKHlFbmQgPiBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IGxvZ2ljYWxTaXplLmhlaWdodCgp
OworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGlu
YXRpb25TY2FubGluZSA9IHJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5l
ID0gbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhl
bCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiByZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBsb2dpY2FsU2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdo
aWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwg
c291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0
aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAg
ICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBG
aWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVm
ZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkp
OworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNw
YWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAg
YXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMg
aW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIK
KyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3Jt
YXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJldHVybiBjb252ZXJ0
ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30KKworc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZv
cm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKwor
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZl
cgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwg
cmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwg
YWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpj
b3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBw
aXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVm
ZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9OworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAg
ICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1
ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpj
b2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVm
ZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9u
LCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJl
c3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWlu
dDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAg
IGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdl
IG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAg
IEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lO
VFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWlu
dDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0
LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhl
bERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0
ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBp
eGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsK
KworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxB
cnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGlu
dCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3Zl
ciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVu
dHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAg
Ly8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0g
KihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxw
aGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAg
ICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxE
YXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAv
LyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5V
U0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2Nv
bG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQg
dGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFk
ZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1
bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmlt
YWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MGVjNmI1NWM0N2FmNDYyNTY5Zjcx
MWM3NTY3ODI5M2MwY2Q4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1h
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdl
UmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAg
ICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUlt
YWdlUmVjdDsgfQorCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1
ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZl
cihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworCisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
KCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
KTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJbWFnZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUlt
YWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisK
KyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdl
Qnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBj
b25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1
ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSkgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7CisKKyAg
ICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgbV9jb2xvclNwYWNlOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVy
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmlu
ZGV4IDk5Njk0MzcyNTc5M2U5OTY0NmZjM2U1YjIyYWQxNTFmYmRmZGU5Y2EuLjMwNGZiYjk3N2Q4
MmZkOTFiZmNiYTgyMmIzMThkMmUwZGYzM2ExZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC00Nyw3
ICs0Nyw3IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkK
IAogdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRl
eCBlMTIzZGNkOGZmMjFkZGM3NzMzZTU3ZTUxNWVmMzExZTdjOTAxNTgwLi42NDQ1NjM0M2NiZTAz
N2VlMDM2MzQyNzFhMWE2NWM0YjM1NDg2NjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ewogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
NWY4YmNlMWI0ODg2NzQ2NjFlMjljM2I4YTM5NmI3NThkYjQ2NDNhYi4uNjAxZGNlNWVhNjg1ZTM3
MWU1NzBhZTQ2OTQzODFkYTQyNTQyYjdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTM0LDcgKzM0
LDYgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQogICAgICAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhp
YykKICAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOwogICAgIH0KIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZjEwMzUzMzllYzQxZDZlNTQw
ZjI1ZjYxZDFkYzUyYjU2NmQwYTkzZi4uNDMxNGFjNjY0ZTFmZjNmMDMzNWM3NTA1ODA2ZjFlM2Q0
MzBkNWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgR3JhcGhpYwogICAgICAgICBpZiAoIWxhc3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAg
ICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QXBwbHlpbmc7CiAgICAg
ICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3Jy
ZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgICAgICAgICBsYXN0RWZmZWN0
LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QnVp
bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCmluZGV4IDQ1NDQ1YjI4MTM0MzZkYmVmNjM1NjkxNTgxZGU2MWRlZmE4MjNiYWQuLmRi
YTYyMWE3N2VhMDEwYTVjY2ZiNWUyZjQ5ZTJkOTI2ZDZjZjAxODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC03NiwxMCAr
NzYsNyBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogdm9p
ZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIC8vIEZFSW1hZ2UgcmVz
dWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggNzMxN2Q5YTk0ZWFjMDc4YTg4
ZGU3YTdlMzA0MzQwYTdkMmYxZDgxZi4uYThhNTI4MTdlMDBlMjRkMGNmMzljZmQ5NzQyOTlmNDQw
YzRlOGZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaApAQCAtNDQsOCArNDQsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUlt
YWdlKEZpbHRlciYsIFNvdXJjZUltYWdlJiYsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBh
bHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9
CisKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7CisKKyAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFsOworCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBTb3VyY2VJbWFnZSBtX3NvdXJjZUltYWdlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443995</attachid>
            <date>2021-11-11 13:19:34 -0800</date>
            <delta_ts>2021-11-14 22:38:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211111131933.patch</filename>
            <type>text/plain</type>
            <size>87857</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVhOGEzNjc0OTY2MjIx
MTIzNmRiMDQ3Njc5NjNlMDVhMDRjZjA0OS4uNzE3OTE5YjVlNDk5YzFjNTc2NDkwODIwNzc1NzMx
ZjYwNTIzYzc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVyUmVzdWx0Jy4gVGhpcyB3aWxsCisgICAgICAgIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBGaWx0ZXJFZmZlY3QuIEl0IHdpbGwgYWxzbyBhbGxvdyBpbnRlZ3JhdGluZworICAgICAg
ICB0aGUgQ29yZUltYWdlIHNlYW1sZXNzbHkgYW5kIHNpbXBsaWZ5aW5nIHRoZSBnZW9tZXRyeSBj
YWxjdWxhdGlvbi4KKworICAgICAgICBJbnN0ZWFkIG9mIGhhdmluZyB0aHJlZSB3YXlzIHRvIGNy
ZWF0ZSB0aGUgcmVzdWx0IG9mIGEgRmlsdGVyRWZmZWN0LCB0aGVyZQorICAgICAgICB3aWxsIGJl
IG9uZSB3YXkgd2hpY2ggaXMgYnkgY2FsbGluZyBGaWx0ZXJJbWFnZTo6Y3JlYXRlKCkuIFRoaXMg
Y2FsbCB3aWxsCisgICAgICAgIG5vdCBjcmVhdGUgYSBjb25jcmV0ZSByZXN1bHQuIEJ1dCByZXF1
ZXN0aW5nIHRoZSBJbWFnZUJ1ZmZlciBvciBhIFBpeGVsQnVmZmVyCisgICAgICAgIGZyb20gRmls
dGVySW1hZ2Ugd2lsbCBtYWtlIHRoaXMgY3JlYXRpb24gaGFwcGVucy4KKworICAgICAgICBUaGUg
ZGVmYXVsdCBvZiB0aGUgb3BlcmF0aW5nIENvbG9yU3BhY2UgaXMgc1JHQi4gQnV0IGl0IHdpbGwg
YmUgc2V0IHRvIAorICAgICAgICBsaW5lYXJSR0IgaWYgdGhlIGNvbG9yIGludGVycG9sYXRpb24g
b2YgdGhlIGZpbHRlciBlZmZlY3QgZWxlbWVudCBpcyAKKyAgICAgICAgbGluZWFyUkdCLiBUaGUg
b25seSBleGNlcHRpb24gaXMgdGhlIEZFSW1hZ2Ugd2hvc2UgcmVzdWx0IGhhcyB0byBiZSBpbiAK
KyAgICAgICAgc1JHQiBhbHdheXMuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhl
IHJlc3VsdCBDb2xvclNwYWNlIGlzIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZS4KKyAgICAgICAg
VGhlIG9ubHkgZXhjZXB0aW9uIGlzIEZFRGlzcGxhY2VtZW50TWFwIHdob3NlIHJlc3VsdCBoYXMg
dG8gYmUgaW4gdGhlIAorICAgICAgICBzYW1lIGNvbG9yIG9mIHRoZSAnaW4nIGltYWdlLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgcmVxdWly
ZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0aGUgb3Bwb3NpdGUg
CisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpLiBDb3JyZWN0
aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJlIGRvbmUgYnkgRmls
dGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNl
bWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y3JlYXRlUmVzdWx0KToKKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSk6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUgYnkgbnVsbGlm
eWluZyBhIHNpbmdsZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5w
cmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmdldFVu
cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omdl
dFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3Bh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVy
dGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICBBbGwg
dGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB3YXMgbW92ZWQgdG8gRmlsdGVySW1hZ2UuY3Bw
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGll
ZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmFic29sdXRlSW1hZ2VS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMTEgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgLVdhcnJheS1ib3VuZHMsIC1Xc3RyaW5n
b3AtdHJ1bmNhdGlvbiwgLVdzdHJpbmdvcC1vdmVycmVhZCB3YXJuaW5ncyBpbiBQYWNrZWQuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCA5ZGU5ZmQ4MzVmMjFkZWY4NDU2MGMyMWIyYjg2ZTc5ZDQ0N2VmOGFj
Li4wMzQ5MGU1MjRkMzJmNTJjYTA5MjlkOWVjZThhMGViYWEyYTAxNzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMjA5OCw2ICsyMDk4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDU4OTk2YjFiODUzYTJmN2FjMTkwNTdkMjY5OTEwMjA3MDkyMzJmOTkuLmMyMWE4NzU2ODA1YTNm
OTE0Y2Y4NDg1ZGNhOGJjNjliYjBiZDZmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODQ5LDYgKzEwODQ5LDggQEAKIAkJ
NzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVS
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJs
ZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWlu
TWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1
RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MzUsMTEgKzE4
OTM3LDExIEBACiAJCTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAvKiBicmlkZ2UgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTU5QjU5NzcxMTEwODY1NTYw
MDcxNTlFOCAvKiBqc2MgKi8sCi0JCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMg
Ki8sCiAJCQkJNTk5RTc1OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oICovLAogCQkJCTFB
NzFENTc5MEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNwcCAqLywKIAkJCQkxQTcx
RDU3QTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5oICovLAorCQkJCTU5QjU5Nzcx
MTEwODY1NTYwMDcxNTlFOCAvKiBqc2MgKi8sCisJCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgz
IC8qIG9iamMgKi8sCiAJCQkJMUE1NjlDRUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJy
YXkuY3BwICovLAogCQkJCTFBNTY5Q0YwMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5
LmggKi8sCiAJCQkJMUE1NjlDRjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNw
cCAqLywKQEAgLTI1OTEwLDYgKzI1OTEyLDggQEAKIAkJCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2
NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBD
NTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1
NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8q
IEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQppbmRleCA5OWIxNjlhMzgxZTEyMjE3NzYwMmEyYTczMjMxYjQwYjFiOGVl
OWJmLi4yYzU5NWNiMjllYzAxODA1NDc1M2M3M2M1YzU2ZjE4ZWI3YTQxZGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC0xMTYsNyAr
MTE2LDYgQEAgUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Ojpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYKICAgICAgICAgaW5wdXRJbWFnZXMuYXBw
ZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KICAgICBlZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKICAgICAKICAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCku
aXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZh
MTcxY2YxOC4uZDliZDViY2I5NzZjNjEwNTdhZmFiOGUwMTA5ZjQ5YjM2YmI1N2E4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2Fy
bS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTExMiwxNyArMTEyLDE3IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVk
UmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm47CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0g
ICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVj
dEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QSA9IGluLT5nZXRQcmVt
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVj
dEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUIgPSBpbjItPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXlCID0gaW4yLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVj
dCk7CiAKICAgICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxB
cnJheUEtPmxlbmd0aCgpOwogICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCBiNGNhZWQ0NTU1NzJmYzg1Y2VkOGE0
ZjIzMWM5ZjgzMDI3YmFmYjBiLi40OTc1MGZkYThjNmQyN2NjNGI0NWQzNzllNjFmYjUzYjVlNDNj
ZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggYTc5MWJk
NmQzMWZkNzUwNGExMTMyN2YxZDQxYWNiZDNhNDllMTk1Mi4uMDIxYmQ1MmM3MzRlYjcyOTU3NzFi
NmUwYjA2MjQ0NjhkZDkwNTgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNzcsNyArMjc3
LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4
IGNlMDBjYzE5ODI5NzliNDA5NDA0ZDVjZmRjYzAzYTZlZDMzNWMzYjIuLjE2ZmQ5OGExZGViZTU4
MTFmMzg0YjJhODRkZDgxOTRmOTE3ZDMyNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnBy
ZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJl
ZFRhYmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAg
ICBpbi0+Y29weVVucHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAg
ICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVs
QXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggZTBi
ZWYzMDc0MDVmZjIzM2U4YTJhZmI1Y2JlYzhkNTQ4ZDIyNzgwOC4uNWRhNmU4ZWEyNTcyMTk1NDdl
ZTg4YzFiMzQ3Y2M2ZGUzMDY5YWFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0ICs4Nyw2
IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewot
ICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAg
ICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25l
ZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9
OwpAQCAtMjI5LDE0ICsyMjEsMTQgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAg
aWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlw
bGllZFJlc3VsdCgpOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICAgICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRQcmVt
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwog
CkBAIC0yNDcsNyArMjM5LDcgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAg
ICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCAzOTIzN2ZlYjEyN2FkMWZmMWRlMjE4
MzRiZDdiMmI3MzdmYWFmMzJkLi44ZGI0MDBhMmNmYWM4ZTY3YmJkYWQwM2RiZDk1NWJlY2YyNWVh
NTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01OCwxNiArNTgsMTUgQEAgcHVibGljOgogICAgIGZsb2F0
IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1w
cm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
OyB9Ci0KIHByaXZhdGU6CiAgICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAgIHZvaWQg
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwogCisgICAgYm9vbCBtYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUg
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQorCiAgICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdh
cmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCBlODZmMTI5YzU0YjFkOGZkOGVkOTI5NDZlMmNlMWI2
OTgyMzAzYmVkLi5lYTAwM2RjYTkxNGE2MDlhY2U1ZGEzYzkwNjNjZTJjYTcxZTZkODZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIEZFQ29udm9s
dmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyB1bnByZW11bHRpcGxpZWRSZXN1bHQoKSA6IHByZW11
bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzc5LDkgKzM3OSw5IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
c291cmNlUGl4ZWxBcnJheTsKICAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5n
ZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CiAgICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJj
ZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAppbmRleCAyNGE0NjI2YzZhMWM4MWZjNzc0ZGE2MjM3NmMxMjliZDg2ZDcxZTI5Li43ZTQ3ZmNm
ZGQwZTgyMTJiYjE4MWJjNmUzNjVhZjdiNTY4NTg3N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcApAQCAtNjksMTMgKzY5LDEzIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
Citjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRD
b2xvclNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRp
b24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1h
Z2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBU
aGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBj
b2xvciBzcGFjZS4KLSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFj
ZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZp
bHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29s
b3JTcGFjZSgpKTsKKyAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFj
ZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgorICAgIHJl
dHVybiBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4s
IGNvbnN0IGludCBpbmRleCkKQEAgLTk5LDE4ICs5OSwxOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9
IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPmdldFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIElu
dFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1
c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcg
bm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1h
Z2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1
dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPmdldFVucHJlbXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RCRHJhd2luZ1JlY3QpOwogICAgIAogICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2Vt
ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBh
YTViNmQ0NmJjNDY0ZmM2ZDA2MGQ4NmFmNmJhZTBlZjA3ZWM5ZThkLi5jZTJkZWEyZTRlNzk2MDc5
ZDM1YzQwNmU2ZDZjMmUwNTIxZGM3NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC00
OCwxOSArNDgsMTkgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1
bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAg
IHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQp
IG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKworICAgIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25z
dCBpbnQpIG92ZXJyaWRlOworCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KIAotICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNl
bGVjdG9yIC0gMTsgfQotICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95
Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAppbmRleCA1MWFkMmY4NWYyYzI3YTZlZTUwNzRmMmMxNjFlYjkxNDY4
YzllYzI2Li5hYWU0NDk3MmEzZjk1Nzk5N2RlZjJmNmE5OWQ4M2YzMTQ4OWM2NzliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4
IGE3ODQyMTk2NzRlMWFlOTc5OTM0NDM4ZGE1NGExYTcxYzk4MDQ4NDIuLjg5ZmZiMmE5ZTgyM2E5
OTczOTk2ZmRjZWYwMDZiZmVjMzMyM2IzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtNjAsNyArNjAsNyBAQCBi
b29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAKIHZvaWQg
RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4IDA4YTRlOTU5MzU4NWQyZmEwNzI2ODRkNDVkNWY4
OTMwZjNhZWVmMGEuLmI0OWNkYWZjMGUwN2FjOGQ5YjgyMTM2ODkxM2JmNmZlZTFkOTg1N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5oCkBAIC00MCw4ICs0MCw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxv
b2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0
aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJl
Z2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAg
ICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRl
eCA4ZTQ2YzUwMjZmZTY1Yzc1NTk2Mzc3NWQwYmU2OTk3MDJkNDhmMjU1Li4wN2ZlN2Q3OWFlNjZl
MDBkNzUzNjY1OTM5ZTdjMTJiZWJlZjczNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAt
NTIzLDcgKzUyMyw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1
bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKaW5kZXggNjU5YjEwNTVmNjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1MDcx
YWU5Mi4uMGUxNzJiMWMzYjRkYTg5NDQ4ZTFlOTUzMzg2ZGE2N2M0NTg1ZjEyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBs
aWVkUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDY5N2QyZTE1Y2NiZjFhZWZlZDBlODlmZGEzNGU3MDMyOTMw
N2Y3M2MuLmFiNmU0N2IwZmRmNWUzMzBiMTliN2ZhMmJiMTNjMzVmODkzYWVjZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJU
KHNpemUgPiAwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmNwcAppbmRleCAxYjBkYWViMGRiNTZlODE4OTIwMThhMzA3NTA2ZjM1NzcxZDY4
YzAwLi4xNTM3YmNiZTMxN2Y0ZTQ1ODhiNjYxMTJlZGY5YmE0M2ZiOGM0MDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11
bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXR1cm47CiAKICAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVt
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghc291
cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAyOGNiYzYw
YTQ0N2YzNjliY2NlZGEwMDVjOTE3NWIzMWIxOGQ4ZjYuLmIwZjMyOGRjYzIwY2U0ZTg3Yzc3Y2Y4
ODMzZmQ1YjcyZDI4OGE2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgRkVP
ZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAKaW5kZXggM2U1MGZiNmMwMGVjZjM4Mzk4NWM2Mjk3OTg0ZjZlOTc4NWNl
NDI0ZS4uOTYwNGExZTlmMjk3ZGM0OTY3NWJjM2VhYzNlZTE4NWE3MDgyMmE0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApA
QCAtNDYsNyArNDYsNyBAQCB2b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIC8v
IEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNv
bXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwg
IWluQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYTJlN2Fl
YzM0ZDZhOTU1NDRhMDcwNjk3ZGE1NzhlMTgzNTYwZGI1Yy4uOTRjZjFhMjExNTI5MTJmOTY4Yzdi
NWRkNzkyN2Q1MDllYzkyYjc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5NSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKIHsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1
bnByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlZmZjOGYxN2RmYmM2
NTRkNWUzZDI3MWQ5MDYzMDRmYzM1ZDZmZmQuLmU1MTk1NDYxNWU0M2YwNjJiMjk3YTljNDExZmU1
MDEzM2I3ODk4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDIyICsyNywxMSBAQAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlV
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1f
bmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVy
YXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRl
ckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6OlR5cGUg
dHlwZSkKQEAgLTE1OSw0NzIgKzE0OCwxMDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkK
ICAgICB9CiAKICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3Vs
dENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKIAotICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8
IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIg
PDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0
ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21h
eEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgp
OiIKKyAgICAgICAgPDwgIlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbgorICAgICAgICA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8
PCBtX2VmZmVjdEJvdW5kYXJpZXMKKyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24KKyAgICAgICAgPDwgIlxu
ICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QKKyAgICAgICAgPDwg
IlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0CisgICAgICAgIDw8ICJcbiAg
ZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBpZiAobV9h
YnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkp
LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAgICBpZiAoIW1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaW4gOiBtX2lu
cHV0RWZmZWN0cykKKyAgICAgICAgICAgIGluLT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElm
TmVlZGVkKCk7CiAgICAgfQotICAgIAorCisgICAgaWYgKCFjcmVhdGVSZXN1bHQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9u
cyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KICAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsK
IH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkK
K2Jvb2wgRmlsdGVyRWZmZWN0OjpjcmVhdGVSZXN1bHQoKQogewotICAgIC8vIE11c3Qgb3BlcmF0
ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGlu
dmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQot
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0
ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9y
IGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsK
LSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWlu
dDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25l
bnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+
IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVs
RGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAg
ICsrcGl4ZWxEYXRhOwotICAgIH0KKyAgICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBy
ZXN1bHRDb2xvclNwYWNlKCkpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lk
IEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQg
PSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7
Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9m
aWx0ZXJJbWFnZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3Vs
dHNSZWN1cnNpdmUoKQogewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRo
YXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBp
ZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQo
KSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0
RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSgpOworICAgIGNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0
RWZmZWN0cykKKyAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAog
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAi
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKLQogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgMSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25S
ZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICByZXR1cm4g
bV9maWx0ZXJJbWFnZS0+aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK1BpeGVs
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNj
YWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhl
bEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tl
ZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFy
cmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICByZXR1
cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVy
RWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KCkKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUo
cmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHNjYWxlZFNpemUpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYg
KCFwaXhlbEFycmF5KQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xv
clNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAg
ICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVz
dGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5
IHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0Lnko
KSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBz
Y2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVt
c2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAg
Ly8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBz
b3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZ
KCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBz
Y2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0g
MDsKLSAgICBpZiAoeE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAg
ICAgICAgeE9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhY
KCk7Ci0gICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVu
ZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRS
ZWN0LnkoKTsKLSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAg
ICAgICB5RGVzdCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAg
aW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsK
LQotICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0
aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2Fu
bGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lk
dGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291
cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmln
aW4pICogNDsKLQotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlv
blBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNv
dXJjZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQorICAgIHJldHVybiBtX2Zp
bHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKIH0KIAotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQot
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7
Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0
aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRp
cmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2Rl
KCksIDEsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1
dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1hdCk7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBU
aGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9u
LgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXpl
KHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBj
b3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBj
b252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIDEsIHRhcmdldENvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9u
IGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRv
IGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
aW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2Ug
fTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJl
Y3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBk
YXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlv
bgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNv
bnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMo
Y29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0K
LQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8g
d2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBj
b252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5k
YXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6Z2V0VW5w
cmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewogICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2Up
KSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgp
ID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAg
ICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3Bh
Y2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRT
aXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhh
KG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAg
ICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
cmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQor
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmdldFByZW11bHRpcGxpZWRS
ZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAg
ICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAg
ICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwg
KmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
QVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhpbnB1dFNpemUpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAg
ICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNl
IH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVy
Ojp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNv
bG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5
dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0
KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMsIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQu
Ci0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgMSwgbV9yZXN1bHRDb2xvclNwYWNl
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpOworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1
bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKIHsK
LSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8v
IE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQo
KSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICht
X2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1
bHRDb2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVm
ZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIG1fZmlsdGVy
SW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAogewotICAgIExPRyhG
aWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAg
QVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0
ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0
U2l6ZSkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNw
YWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0OworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgbV9maWx0ZXJJbWFnZS0+
Y29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCByZWN0LCBjb2xvclNwYWNlKTsKIH0KIAotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKQogewotI2lmIFVTRShDRykK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVw
IG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQg
ZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBp
biB0aGUgaW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3
IHBpeGVscwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JT
cGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9u
YWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVO
VVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgorICAgIGlmICghaGFzUmVzdWx0KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlw
bGllZFBpeGVscygpKQorICAgICAgICByZXR1cm47CisgICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVj
dFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xv
ciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5h
dGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQo
KSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBv
dGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0g
ICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRp
cGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0g
ZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVs
bG9wdDsKLSNlbmRpZgorICAgIG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShk
ZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CkBAIC02MzUsOCArMjU4LDggQEAgVGV4dFN0cmVhbSYg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblQKICAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9u
VHlwZTo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxw
aGFJbWFnZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2Ui
LCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3Vs
dCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKKyAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCByZXN1bHRDb2xvclNwYWNl
KCkpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggNjY3NjAwZDMwMmM4ZmM5YjVhOGY0ZjFmYzhmMGM1NjljYmUy
YTdiMi4uMzVlNDhlZjJiZWI5M2Y0MWZiYjZmOTVjMTU1MDQ5ZWY3MmVhOTVjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yMiwxNiArMjIsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNl
LmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTQ4LDI2ICs0MiwyOCBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCiBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgorICAgIGJvb2wgY3JlYXRlUmVzdWx0KCk7CiAg
ICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVj
dXJzaXZlKCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3Qg
SW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVs
bG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFBp
eGVsQnVmZmVyKiB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsKKyAgICBQaXhlbEJ1ZmZlciogcHJl
bXVsdGlwbGllZFJlc3VsdCgpOworCisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlckltYWdlOyB9CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVu
cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisKKyAgICB2b2lkIGNv
cHlVbnByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KSBjb25zdDsKKyAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisKKyAgICB2b2lk
IGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKyAgICAKICAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5z
aXplKCk7IH0KICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3Ms
IGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAg
ICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0OwotICAgIH0KLQogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNv
bnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgCkBAIC04NiwxMSArODIsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5KCk7CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAK
ICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2lu
ZyB9OwpAQCAtMTI4LDggKzExOSw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0
aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNl
KGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0Nv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xv
clNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBj
b25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xv
clNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmKTsKQEAgLTE0NCwzNyArMTM1LDE4IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsKLSAgICAKLSAgICBJbWFn
ZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAK
LSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJl
Y3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0g
YW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29s
IHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZh
bGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJl
bXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNs
aXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CiAKLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVm
ZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0
UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4
ZWxCdWZmZXImKTsKLSAgICAKLQogICAgIEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlcklt
YWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMjAyLDEy
ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRz
IHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBv
ZiBpdHMgaW5wdXRzLgogICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwogCi0jaWYg
RU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9v
cGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNl
bmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVj
dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGI1ZTcxZTRmMDM1YjUxZWE5MGIxOWU3
MGQ1ODYwMzRmNThjMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24u
aD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8Rmls
dGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFn
ZVJlY3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRmlsdGVySW1hZ2UoYWJzb2x1dGVJbWFnZVJlY3QsIHJlbmRlcmluZ01vZGUsIGNvbG9y
U3BhY2UpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEludFJlY3QmIGFi
c29sdXRlSW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fYWJzb2x1dGVJbWFnZVJlY3Qo
YWJzb2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkK
KyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmls
dGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdN
b2RlLCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2lt
YWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7
IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAg
ICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAo
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsK
KworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sK
KyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lk
dGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAg
IHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAg
ZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0
aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhh
IC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUm
IGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMg
PSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBz
cmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3Qu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRl
czsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5k
YXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAqIDQpOwor
ICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwor
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJj
ZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0g
MDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwor
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4m
IEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
YWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIg
OiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlcklt
YWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQorewor
ICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7
CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVl
KCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VC
dWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Qu
c2l6ZSgpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisK
KyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOwor
CisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNh
bFNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgeworICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAg
ICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBsb2dpY2FsU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29w
eVByZW11bHRpcGx5aW5nQWxwaGEoc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZm
ZXItPmRhdGEoKSwgbG9naWNhbFNpemUpOworICAgIH0KKworICAgIHJldHVybiAmcGl4ZWxCdWZm
ZXIudmFsdWUoKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9y
U3BhY2UpCit7CisgICAgSW50U2l6ZSBzaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzaXplKSk7CisKKyAgICBhdXRvIGNoZWNrZWRB
cmVhID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFy
ZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
cGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChj
aGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVj
dCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRl
ckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNF
KENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhl
IHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkg
bmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVy
ZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGlu
ZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpj
b2xvclNwYWNlOworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJ
bWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRT
aXplIGxvZ2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKworICAgIC8vIElu
aXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50
aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVj
dC55KCkgPCAwIHx8IHJlY3QubWF4WCgpID4gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0Lm1h
eFkoKSA+IGxvZ2ljYWxTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24u
ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4g
aWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAo
cmVjdC5tYXhYKCkgPD0gMCB8fCByZWN0Lm1heFkoKSA8PSAwIHx8IHJlY3QueCgpID49IGxvZ2lj
YWxTaXplLndpZHRoKCkgfHwgcmVjdC55KCkgPj0gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CisgICAgaW50IHhEZXN0
ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsK
KyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gcmVjdC5tYXhYKCk7
CisgICAgaWYgKHhFbmQgPiBsb2dpY2FsU2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gbG9n
aWNhbFNpemUud2lkdGgoKTsKKworICAgIGludCB5T3JpZ2luID0gcmVjdC55KCk7CisgICAgaW50
IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9y
aWdpbjsKKyAgICAgICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gcmVjdC5t
YXhZKCk7CisgICAgaWYgKHlFbmQgPiBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVu
ZCA9IGxvZ2ljYWxTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmln
aW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHJlY3Qud2lkdGgoKSAqIDQ7
CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3Qg
KiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQ
aXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBsb2dpY2FsU2l6ZS53aWR0aCgpKSAr
IHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBt
ZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVs
ICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3
aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBz
cGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUg
aW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFj
ZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6
OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVy
LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBz
dG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAx
LCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOwor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMo
YWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkg
OiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAg
ICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7
CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0
LnNpemUoKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVy
ID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVj
dCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4
ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAo
YXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhl
bEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVm
ZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJJbWFn
ZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVy
YXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUg
aW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3By
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9
IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJh
eS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwg
YW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7
CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5n
dGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBp
eGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIElu
Y3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRl
ZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVs
cy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52
YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0
ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVu
UGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAo
cGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4
M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8g
NDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQg
YWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVt
UGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4
ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xh
bXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0
aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAg
ICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9y
IGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJJbWFn
ZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1l
bnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAg
ICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFn
ZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9y
bSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0
byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVy
LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9yU3BhY2Ug
PSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51
bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7Cisj
ZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE1MGVjNmI1NWM0N2FmNDYyNTY5ZjcxMWM3NTY3ODI5M2MwY2Q4YTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1
ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFn
ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJik7CisKKyAgICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdDsgfQorCisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhp
c3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworCisgICAgdm9pZCBjb3JyZWN0
UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJbWFnZShj
b25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNv
bnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwg
RGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1f
YWJzb2x1dGVJbWFnZVJlY3Q7CisKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsK
KyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IDk5Njk0MzcyNTc5M2U5OTY0NmZjM2U1YjIyYWQx
NTFmYmRmZGU5Y2EuLjMwNGZiYjk3N2Q4MmZkOTFiZmNiYTgyMmIzMThkMmUwZGYzM2ExZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCBlMTIzZGNkOGZmMjFkZGM3NzMzZTU3ZTUxNWVmMzEx
ZTdjOTAxNTgwLi42NDQ1NjM0M2NiZTAzN2VlMDM2MzQyNzFhMWE2NWM0YjM1NDg2NjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdl
KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggNWY4YmNlMWI0ODg2NzQ2NjFlMjljM2I4YTM5NmI3NThk
YjQ2NDNhYi4uNjAxZGNlNWVhNjg1ZTM3MWU1NzBhZTQ2OTQzODFkYTQyNTQyYjdiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgKQEAgLTM0LDcgKzM0LDYgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VHcmFwaGlj
KEZpbHRlciYgZmlsdGVyKQogICAgICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKICAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgIH0KIAogICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
aW5kZXggZjEwMzUzMzllYzQxZDZlNTQwZjI1ZjYxZDFkYzUyYjU2NmQwYTkzZi4uNDMxNGFjNjY0
ZTFmZjNmMDMzNWM3NTA1ODA2ZjFlM2Q0MzBkNWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTIz
Nyw3ICsyMzcsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBpZiAoIWxhc3RF
ZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmls
dGVyRGF0YTo6QXBwbHlpbmc7CiAgICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwotICAg
ICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAg
ICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7
CiAgICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRh
LnN0YXRlID0gRmlsdGVyRGF0YTo6QnVpbHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDQ1NDQ1YjI4MTM0MzZkYmVmNjM1
NjkxNTgxZGU2MWRlZmE4MjNiYWQuLmRiYTYyMWE3N2VhMDEwYTVjY2ZiNWUyZjQ5ZTJkOTI2ZDZj
ZjAxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCkBAIC03NiwxMCArNzYsNyBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkKIAogdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogewotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
aW5kZXggNzMxN2Q5YTk0ZWFjMDc4YTg4ZGU3YTdlMzA0MzQwYTdkMmYxZDgxZi4uYThhNTI4MTdl
MDBlMjRkMGNmMzljZmQ5NzQyOTlmNDQwYzRlOGZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDQsOCArNDQsMTMgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBGRUltYWdlKEZpbHRlciYsIFNvdXJjZUltYWdlJiYsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7CisgICAg
Ly8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CisKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgZmluYWw7CisKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFs
OworCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBTb3VyY2VJ
bWFnZSBtX3NvdXJjZUltYWdlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444211</attachid>
            <date>2021-11-14 22:38:19 -0800</date>
            <delta_ts>2021-11-19 17:03:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211114223818.patch</filename>
            <type>text/plain</type>
            <size>86924</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQ1YWJmYjdlYThmZGY3
ODJlN2EyM2Q0NTQxY2RjOWFiN2U1NzUxNy4uOTNmZDZlMzUwZGY1NWNhMzJlNzljMjdmMDUxYzFk
MTFkYWRjNmEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9u
IG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAg
IHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNh
bGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3Jl
YXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUg
b25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBj
YWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVl
c3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0
ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgIFRoZSBk
ZWZhdWx0IG9mIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZSBpcyBzUkdCLiBCdXQgaXQgd2lsbCBi
ZSBzZXQgdG8gCisgICAgICAgIGxpbmVhclJHQiBpZiB0aGUgY29sb3IgaW50ZXJwb2xhdGlvbiBv
ZiB0aGUgZmlsdGVyIGVmZmVjdCBlbGVtZW50IGlzIAorICAgICAgICBsaW5lYXJSR0IuIFRoZSBv
bmx5IGV4Y2VwdGlvbiBpcyB0aGUgRkVJbWFnZSB3aG9zZSByZXN1bHQgaGFzIHRvIGJlIGluIAor
ICAgICAgICBzUkdCIGFsd2F5cy4KKworICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUg
cmVzdWx0IENvbG9yU3BhY2UgaXMgdGhlIG9wZXJhdGluZyBDb2xvclNwYWNlLgorICAgICAgICBU
aGUgb25seSBleGNlcHRpb24gaXMgRkVEaXNwbGFjZW1lbnRNYXAgd2hvc2UgcmVzdWx0IGhhcyB0
byBiZSBpbiB0aGUgCisgICAgICAgIENvbG9yU3BhY2Ugb2YgaXRzIGZpcnN0IGlucHV0IEZpbHRl
ckVmZmVjdC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6Cisg
ICAgICAgIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkg
dGhlIG9wcG9zaXRlIAorICAgICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhl
bHMoKS4gQ29ycmVjdGluZyB0aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBi
ZSBkb25lIGJ5IEZpbHRlckVmZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVsSW5kZXgg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCk6CisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOgorICAgICAgICBDbGVhcmluZyB0aGUgcmVzdWx0IGNhbiBiZSBk
b25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUgcG9pbnRlci4KKworICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9y
Y2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1vdmVkIHRvIEZp
bHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52YWxp
ZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhl
bHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
SW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdl
Qnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5
UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRy
YW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjph
YnNvbHV0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29s
b3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZm
ZXJJZkV4aXN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorCiAyMDIxLTExLTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gUmVt
b3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDU0ZDhkM2JkOTgwZThiOWI2YjgyMWY5Y2NiNGZhNTIyZTFiZjFlMDIuLjgxNmFjYzdl
NjAyYzFlMDFhZjU4ZTgzYTUyMTgxNTM0ODU2Y2ZjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDk5
LDYgKzIwOTksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTk4MTBlYjgy
MDNjY2RhNmI1YzllMzgxNjE0YjYyYmU2ZWYyYTFjYy4uOTAyYTM3NThkNmE4ZjgzMTg0MWU3ZmQz
NDEyZmI5ZTRhMTkxYmUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4NTAsNiArMTA4NTAsOCBAQAogCQk3MjFCNDk2RjI1
MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQml0bWFwQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCaXRtYXBCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQz
NUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMy
OTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVY
VEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkxMyw2ICsyNTkxNSw4IEBACiAJ
CQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8s
CiAJCQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywK
IAkJCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJ
CQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcy
NDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovLAogCQkJCTQ5RUNFQjYz
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOGI0MDAxNzcwMGUx
MGM2ODdiYTcwNmU1NTk2YjhjMGIyMzBiYTI0ZS4uNDk2MTVmZGU4M2VlZDQzMGZlMWU1YzE1Nzhj
MDY5YjIzNjYzNzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQpAQCAtMTE2LDcgKzExNiw2IEBAIFJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhjb25zdCBGaWx0ZXIm
CiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9CiAgICAgZWZm
ZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgZWZmZWN0LnNldFJl
c3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgCiAgICAg
aWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDc3
ODM2ZGRkYjAyNThlOWY3YzViZWIzZWE1MzgwMDIyMThmMmM4YjguLjU3ZDA2MjBjNDVhMDhkNWFk
OTQzZDQyZDQ0MDRhOGVmZTAzYzU5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBA
IC0xMTEsMTcgKzExMSwxNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQoKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJj
ZVBpeGVsQXJyYXlBID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
KTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0gaW4tPmdldFByZW11bHRpcGxpZWRSZXN1
bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QiA9IGluMi0+cHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUIgPSBp
bjItPmdldFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAogICAgIHVu
c2lnbmVkIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPSBzb3VyY2VQaXhlbEFycmF5QS0+bGVuZ3Ro
KCk7CiAgICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc291cmNlUGl4ZWxBcnJheUItPmxl
bmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDFiYjgzMWNlMzA5ZmM1ZmY3YTM1YTVmNTc2MWJhYzU5Mjcx
NGJjMTcuLjk4YjFlMTQ1YmUxODgxM2QzNGRiMThmMGY1MGRmYWM0MGJlNmNiY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cApAQCAtNTksNyArNTksNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZjBhOWQz
MTgxNmZkNGRkYWE5MGU3MjZmMmU4MTg0MGQ1YWZlMmNmMS4uYzAzZTkyYmRmODE0NjNkMjEzY2Nk
Y2U4NWFkZDVjYTBmNmVmMmI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNzcsNyArMjc3
LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAppbmRleCBiMmRhZDM3MTRjNjNhYWQ5YWYyZWU3M2RkMWUxYTZlNjBmNWJmMmM4Li5i
M2FiYjM3NDg1MDhmNzFjNzc0NjU1Yzg0NTZlNTZiMjBjY2FmYmJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHVucHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTgsNyArMTE4
LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxl
LCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBk
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+Y29weVVucHJlbXVs
dGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBkYXRhID0g
ZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zm
c2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVs
T2Zmc2V0ICs9IDQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggNmQ2YmY1Y2I0NjQ5ZWViMmZjMDc4
ZjM1NTc4ZDkwNzQzYzUxYzA1Mi4uY2MxNzEwOTI4Mzg1YmZiMDVlMGM5ODY3ZmMyYzE4MGI4YmVm
ZjFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3Np
dGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9z
aXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewotICAgIGlmIChtX3R5cGUgIT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAgICAKIHN0YXRpYyB1bnNpZ25l
ZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwpAQCAtMjI5LDE0ICsyMjEs
MTQgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmICht
X3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRS
ZXN1bHQoKTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4t
PnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAg
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAt
MjQ3LDcgKzIzOSw3IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDIyODA3Y2FhOGQ2Njc4
MzliYzAxN2JiNTAyYzA1MDg0ZjcyYmM3MjQuLmQxMmU2NzIwNDIzMTMzMmE3NzM5ZWQ1MTVkY2Fj
MWUxYWEyNDgyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTU5LDEyICs1OSwxMCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICB2b2lkIGNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCByZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KICAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCisgICAgYm9vbCBtYXlQcm9k
dWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQorCiAgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CmluZGV4IDYzMjZhNTZlMWQzMWVjNDU0NjlkOGU3OGE2NmEzYWU5YjllMjgzYTkuLjI3NzFmZjgz
YmY5MGRmYTEzMzU1YWRhYTkwOGIzODVjNTJlY2U3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcApAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJl
c2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBtX3ByZXNlcnZlQWxwaGEgPyB1bnByZW11bHRpcGxpZWRSZXN1bHQoKSA6IHByZW11bHRpcGxp
ZWRSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMzc1LDkgKzM3NSw5IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAg
ICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGlu
LT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKaW5kZXggMzY3NTY4MGM4MWE0ZGE1Mzk2MDM4OGExMjU5ZGRlNjI4YzYxZTdhNC4u
YjIwNzRkZTMyODFlOWNiZDQyYWM4ZjE3MThkZGQyM2RiOWQ4MGRiMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKQEAgLTY4LDEzICs2OCwxMyBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKQorY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6
cmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogVGhlICdjb2xvci1pbnRl
cnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byB0aGUgJ2luMicgc291
cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5IHRvIHRoZSAnaW4nIHNvdXJjZSBp
bWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVtYWluIGluIGl0cwogICAgIC8vIGN1
cnJlbnQgY29sb3Igc3BhY2UuCi0gICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGF0IHNtYWUgY29s
b3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUgJ2luJyBpbWFnZS4K
LSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoaW5wdXRFZmZlY3QoMCktPnJl
c3VsdENvbG9yU3BhY2UoKSk7CisgICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGF0IHNhbWUgY29s
b3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUgJ2luJyBpbWFnZS4K
KyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPnJlc3VsdENvbG9yU3BhY2UoKTsKIH0KIAogdm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCkBAIC05OCwxOCArOTgsMTggQEAgdm9pZCBGRURpc3Bs
YWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBB
U1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3Vs
dCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1
dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVj
dCk7CisgICAgYXV0byBpbnB1dEltYWdlID0gaW4tPmdldFByZW11bHRpcGxpZWRSZXN1bHQoZWZm
ZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCY
aW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVz
LgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChl
ZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPmdl
dFVucHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIAogICAgIGlm
ICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCA0ODEyYjU0YmFkZjRlYzIwZTg5NTVjYTQ3N2RiZjZh
ZWM3OTFiZjZlLi5hNDJmN2NlYWM5MWIyMjk5ZWQ0ZjhkM2VjOGI0N2Q0YzEyZDhiMGI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC00NywxOCArNDcsMTggQEAgcHVibGljOgogICAgIGZs
b2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUo
ZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIEZF
RGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hh
bm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBpbnQgeENo
YW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAg
ICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAt
IDE7IH0KIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVy
cmlkZTsKKyAgICAKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggNGUwYmQ0ZDlkZmQ3ZjVlZDQwOWRjNjkwYzQ4MTIyMmI2
YTIwZmZmZC4uMWM1YzVmZmM0ZjRkYTNhYjhlMDcwMTI0N2YzNGU1NWQ0OWM3NGZmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGUwYTc3NDIxYTdkZjBjOTQ3ZWUzNjk4NDk3ZjYwNTM3NzA1
MzVjYjUuLmE4MDU3Mjc4YzEyNjc2ZWY4YWZlMGEwMzc1NGYwZjJjZmY5OTQ0MzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cApAQCAtNjAsNyArNjAsNyBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBm
bG9vZE9wYWNpdHkpCiAKIHZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZl
clJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApp
bmRleCA4OWViNzIwMjkxMGNhYmY4NzRjZGMxODM5ZDgyNjdkODA2OTcwNGNhLi5iNzY5Y2FkMTEy
NzVjM2M3MGEwNTI0MzYxNjhiN2M2ODUwNTE0MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMzksOCArMzksNyBAQCBw
dWJsaWM6CiAjaWYgIVVTRShDRykKICAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0gY29s
b3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMgaW4g
dGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBv
ZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZm
ZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsg
fQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAjZW5kaWYKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggZGJlNTcxNWU0MTY3MzYzNWZiMzZi
NGFlMmU0MTAwOWM3ZTQ0NGM1MS4uNjI5MWE0NGNjMDg5ODA5OGYwNGZhNzU1MGFhMjNlY2YzNWU1
MTNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIEZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHByZW11bHRpcGxpZWRSZXN1bHQo
KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKaW5kZXggOTExOGE5YmYyNTJlYzgyMDY0NzAzZDVkYWYxZjZmYTg0MDUyYTBj
NC4uZmJkNTAzOTAyYmNjNThlZjUzNGY4NWE5OTEwYzRjN2FiNzA1YzM4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
cHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAzNzgxZGIwYzkwNTRiMWMxNzMyMmJhMWM2
MGEyMDQ2ODkxN2Y3YWEyLi5lNDZhNmEzZjY1MzE1ZGQyNzMzZTNhNGRhNmZmYjBlYTc0NWZiOGFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZl
Y3RJbnB1dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQyZmJhNzRiNTNmYjgw
YTM2Zjk4NGM4MTY4Mzk2ZDQ1MmU2ODRjNzQuLjI3ZjBhMmJjMTZlN2MzZGM3MWQyMTU0YjlkYmI0
MDgxZWYzNmY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0
KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI1Nyw3ICsyNTcsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0
ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgo
KSwgcmFkaXVzLmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzb3VyY2VQ
aXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdl
dFByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAKaW5kZXggNTNkMjUyYTk3Njc0MmE2YzI5YTU0MzZiNTYwM2RjZmZkOGIzZWVjZi4uNjM0
N2RhMDQ2ZjlhYjhmNmM3OWNjYTA5MDNjZTkwOTcxYjRiMmZmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmlu
ZGV4IDgxYWEwYzUzYTFhODM2NTVmNzgyZWM5MmFlMTcwOTg5ZTQ4OGY1M2UuLjljZDg1NDNkMDIw
YjEzYmM1ZWMyYzVhZmZmNGVlOTczMmE3MGU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAg
dm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
IC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBh
IGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBp
bkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Ug
fHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggZjJj
ZmVmMDYxYTM3MDg0OTQzYTIwZWZhZThkOGZiMGM5YmRhNzFjYS4uMTZmZGIwM2I0ZGE0Zjk5NTc3
NWEzODJmMGNhNmVjNGU0ZDY5NDkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5
NSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHVucHJlbXVsdGlwbGllZFJlc3VsdCgpOwogICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKaW5kZXggMWI3ZjM0NThkNDM5ODE4OTRiNDFhYzYyY2FiNGFjMTNhNGUzYTc5Ny4uY2Q5OGE4
MDM2ZjUwZDhjMGY5ODI3MmRmMmVhMDhiYmM5YWE3Nzg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApA
QCAtMjcsMjIgKzI3LDExIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5s
aW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0
OjpUeXBlIHR5cGUpCkBAIC0xNTgsNDc1ICsxNDcsMTA5IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB9CiAKICAgICBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdChmaWx0ZXIpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdD
b2xvclNwYWNlKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZp
bHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6
XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAi
XG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVj
dCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0
ZXIgc2NhbGUgIiA8PCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAgZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24KKyAgICAg
ICAgPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzCisgICAg
ICAgIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5j
bGlwcGVkU3VicmVnaW9uCisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBt
X2Fic29sdXRlUGFpbnRSZWN0CisgICAgICAgIDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1f
bWF4RWZmZWN0UmVjdAorICAgICAgICA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWlyZXNWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICAgICAgaW4t
PmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAgICB9Ci0gICAgCisKKyAg
ICBpZiAoIWNyZWF0ZVJlc3VsdCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBBZGQgcGxh
dGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgog
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRlckVmZmVj
dDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVJlc3VsdCgpCiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJl
c3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAg
dWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJy
YXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZv
dXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4
ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAg
ICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4
ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAg
ICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91
OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0
OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBp
eGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9
IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWws
IGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3Nh
cnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0
aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSAr
IDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3Jl
bWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAq
cGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQor
ICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJl
Y3QsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc3VsdENvbG9yU3BhY2UoKSk7Cisg
ICAgcmV0dXJuIG1fZmlsdGVySW1hZ2U7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdCgpCiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsK
IH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiB7CiAgICAg
Ly8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxlc3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3Qg
aGFzCiAgICAgLy8gYSByZXN1bHQuIENhbiBiZSB1c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBl
cnJvbmVvdXMgc3RhdGUuCi0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBjbGVhclJlc3Vs
dCgpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2lucHV0RWZmZWN0
cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CisgICAgY2xlYXJSZXN1bHQo
KTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICBlZmZl
Y3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCiAgICAgaWYgKCFoYXNSZXN1
bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICAv
LyBGSVhNRTogUmVzcGVjdCB0aGUgRmlsdGVyOjpyZW5kZXJpbmdNb2RlKCkgd2hlbiBjcmVhdGlu
ZyB0aGUgZmlsdGVyIEltYWdlQnVmZmVyIHJlc3VsdC4KLSAgICAvLyBGb3Igbm93IGp1c3QgcGFz
cyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLiBUaGlzIHdpbGwgbm90IGJlIGEgYmVoYXZp
b3IgY2hhbmdlIHNpbmNlCi0gICAgLy8gdGhpcyBpcyB3aGF0IHdlIGRvIGZvciB0aGUgc29mdHdh
cmUgZmlsdGVyIGNvZGUgcGF0aCBhbnl3YXkuCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmltYWdlQnVmZmVyKCk7CiB9CiAKLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29u
c3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVyRWZmZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1
bHQoKQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGll
ZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVs
QXJyYXk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJl
Y3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorUGl4
ZWxCdWZmZXIqIEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCgpCiB7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNj
YWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhl
bEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tl
ZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIEludFNpemUg
c2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIElu
aXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50
aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAg
fHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxl
bmd0aCgpKTsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8
IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwot
ICAgIGludCB4RGVzdCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0
ID0gLXhPcmlnaW47Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9
IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5
T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9y
aWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9
IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlF
bmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0Owot
ICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAg
ICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3Qg
KiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBz
b3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsK
LSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAg
ICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBz
b3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJv
d0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7
Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMu
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAg
ICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0g
cm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGlu
YXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3Vy
Y2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNv
dXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50
OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdo
aWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNl
Q29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFd
KSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQg
Kz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qg
cm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNy
Yy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwot
ICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMg
PSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0
aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCog
c291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQg
PSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAg
dWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwot
ICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAg
ICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCAr
PSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0
ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikK
LXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5
LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIu
c2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVm
ZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCAxLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29u
dmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRl
c3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOwotfQotCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZl
clRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3Bh
Y2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVyQ29udmVyc2lvbi4K
LQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShy
ZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29y
cmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29u
dmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgdGFyZ2V0Q29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIg
dG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFj
ZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
cmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJU
b0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhl
IGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0
aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICgh
Y29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRl
cyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwor
ICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRv
IGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFj
b252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVz
KGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQog
ewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZp
bHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8
PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZm
ZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBp
ZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEg
Y29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVm
ZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3Bh
Y2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRl
ZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAg
ICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07
Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAg
ICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2Ug
fTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBj
b3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JT
cGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMo
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Cisg
ICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQorUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OmdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJU
KGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwg
IkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9t
IHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0g
ICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNv
bG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9y
U3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwot
ICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLQotICAgICAgICAgICAg
QVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwot
ICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgp
LmNoYXJhY3RlcnM4KCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAg
aWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK3ZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZl
Y3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCkuY2hh
cmFjdGVyczgoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxv
d2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6
ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0
U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgQVNTRVJU
KGhhc1Jlc3VsdCgpKTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGlu
YXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29s
b3JTcGFjZSk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkgY29uc3QKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgo
KSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3Vs
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwot
ICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7
CiB9CiAKLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNv
bnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3Vs
dElmTmVlZGVkKCkKIHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1p
bmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAx
KSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRo
ZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRp
b25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNw
YWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMg
bm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8
ICFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZmlsdGVySW1hZ2UtPmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsK
IH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCiB7Ci0jaWYgVVNF
KENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxs
eS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAg
aWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xv
clNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8v
IEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1
ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZwotICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBz
dXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZl
clJlc3VsdCgpLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsK
LQotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLQotICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0jZW5kaWYKKyAgICBtX2ZpbHRlcklt
YWdlLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsKIH0KIAog
VGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25zdApAQCAt
NjM3LDggKzI2MCw4IEBAIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UCiAgICAgaWYgKHJlcHJlc2Vu
dGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewogICAgICAgICBU
ZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JT
cGFjZSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBj
b2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBp
bmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDkyOGJjYjQ4
Y2QyMTllYjFlZTQ1Mjk3YjU5NzRiYjYzZTA5N2U5NWUuLjViYzliNTc4Y2ZhZTFmMTE5ZjA5ZTNk
ZDlhOTNhZmQ0ZGJjOGE0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMTYgKzIyLDEwIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2lu
Y2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9u
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00OCwyNiArNDIsMjggQEAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsK
IAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoK
KyAgICBib29sIGNyZWF0ZVJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCiAgICAgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11
bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwot
ICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBQaXhlbEJ1ZmZlciogdW5wcmVtdWx0aXBsaWVkUmVz
dWx0KCk7CisgICAgUGl4ZWxCdWZmZXIqIHByZW11bHRpcGxpZWRSZXN1bHQoKTsKKworICAgIGJv
b2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJJbWFnZTsgfQorCisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworCisgICAgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdm9pZCBj
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNv
bnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6
Om51bGxvcHQpIGNvbnN0OworCisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElm
TmVlZGVkKCk7CisgICAgCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7
IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3Qo
dW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29u
c3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAgICAgCi0gICAgaW5saW5lIGJv
b2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVl
ZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBu
b3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVz
dWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAg
ICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KICAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgSW50
UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwogICAgIApAQCAtMTI1LDggKzEyMSw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJh
dGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNw
YWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9y
U3BhY2U7IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1
bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3Qq
IGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRp
bmdDb2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKQEAgLTE0MSwzNSArMTM3LDE3IEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChUeXBlKTsKLSAgICAKLSAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
Ly8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlk
aXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBB
YnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VC
eXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5w
dXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwogCiAgICAgSW50
UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMTk3LDEyICsxNzUsNyBAQCBwcml2
YXRlOgogICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdp
b24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgog
ICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0Io
KSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNw
YWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSB9OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jMGI1ZTcxZTRmMDM1YjUxZWE5MGIxOWU3MGQ1ODYwMzRmNThjMmNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRl
ckltYWdlOjpjcmVhdGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29s
dXRlSW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1h
Z2UoYWJzb2x1dGVJbWFnZVJlY3QsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJl
Y3QpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdl
QnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBtX2NvbG9y
U3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0
ZUltYWdlUmVjdC5zaXplKCkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVy
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBt
X2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxF
UkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
KyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNl
LmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVu
dCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBl
bmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9
IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVu
cHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sK
KyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lk
dGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAg
IHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAg
ZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAg
dkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNl
LmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxw
aGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
MDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9
CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7
CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVs
QnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJ
ZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBJbnRTaXplIGxv
Z2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworCisgICAgcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNhbFNpemUpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAg
ICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVu
cHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpLCBsb2dpY2FsU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8m
IHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5n
QWxwaGEoc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9n
aWNhbFNpemUpOworICAgIH0KKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30K
KworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAg
SW50U2l6ZSBzaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhzaXplKSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2l6ZS5hcmVh
PFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7
CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRo
aXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0
cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xv
ciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1
dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisg
ICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vs
c2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRl
ZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
KG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRl
c3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBi
eSB0aGUgc291cmNlLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJl
Y3QubWF4WCgpID4gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0Lm1heFkoKSA+IGxvZ2ljYWxT
aXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0
aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9l
cyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAocmVjdC5tYXhYKCkgPD0g
MCB8fCByZWN0Lm1heFkoKSA8PSAwIHx8IHJlY3QueCgpID49IGxvZ2ljYWxTaXplLndpZHRoKCkg
fHwgcmVjdC55KCkgPj0gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAo
eE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdp
biA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gcmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQg
PiBsb2dpY2FsU2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gbG9naWNhbFNpemUud2lkdGgo
KTsKKworICAgIGludCB5T3JpZ2luID0gcmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsKKyAg
ICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAgICAg
eU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gcmVjdC5tYXhZKCk7CisgICAgaWYg
KHlFbmQgPiBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IGxvZ2ljYWxTaXpl
LmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJj
ZVNjYW5saW5lID0gbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGlu
YXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiByZWN0LndpZHRoKCkp
ICsgeERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5k
YXRhKCkgKyAoKHlPcmlnaW4gKiBsb2dpY2FsU2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsK
KworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5s
aW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVj
dC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0
IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9u
IGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRv
IGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
YWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJldHVy
biBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30K
Kworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7
CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAg
RmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6
ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQ
aXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX2NvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhl
bEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRl
ckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAg
ICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpID8g
JnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNv
bG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVm
ZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAgICAg
ICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9OworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2Up
KQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlz
LT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFG
b3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0
aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMu
CisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKwor
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0
ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9y
IGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsK
KyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWlu
dDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25l
bnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+
IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVs
RGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAg
ICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIFVTRShD
RykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHku
CisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBpZiAoY29sb3JTcGFj
ZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBj
YW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJz
aW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0
aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwor
ICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MGVjNmI1NWM0N2Fm
NDYyNTY5ZjcxMWM3NTY3ODI5M2MwY2Q4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3Mg
RmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBJbnRSZWN0JiBhYnNv
bHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7CisKKyAgICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9h
YnNvbHV0ZUltYWdlUmVjdDsgfQorCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisK
KyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyByZXR1cm4g
bV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworCisgICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQ
aXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gPSBzdGQ6Om51bGxvcHQpOworCisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJbWFnZShjb25zdCBJbnRSZWN0JiBh
YnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQg
Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xv
clNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJl
Y3Q7CisKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuY3BwCmluZGV4IGUxMDRhOGQyMDg2MGVmODAyOWFmNzNhZTkxM2E5NDdlZTFjZTY4N2EuLmE1
OTZkNDhlNGQ1OWI2MzUxOWMyODk3NjI0ZTBhNDhjZmEwZmFkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiB2b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA0YThhMjc0OGJkZTlj
MTM1OWU1OTQ1ZDgxMGU0YzBjYzY2YjgwYjM1Li5lYTc3ZTM1OTZkZmJhYTA1YTliYTFmMjMzMDFm
NTViZDEzZDk1MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTM0LDcgKzM0LDYgQEAgUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpCiBTb3VyY2VHcmFwaGljOjpT
b3VyY2VHcmFwaGljKCkKICAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWMpCiB7Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7CiB9CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCkBAIC00NSw3ICs0NCw3IEBAIHZv
aWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAKIHZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0
ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA0YTA1MGIxNjk1OTk5MTJkMDcz
ZWZkZDdhMzcwMzU1MjhlMzI1MTJjLi5mMGEyNjViZjY3MGE5ODNjZDYyMTUwNjVkMTY3OGJhMjI0
MjkyNTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBHcmFwaGljCiAgICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKICAg
ICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKICAgICAg
ICAgICAgIGZpbHRlckRhdGEuZmlsdGVyLT5hcHBseSgpOwotICAgICAgICAgICAgbGFzdEVmZmVj
dC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgICAgICAgICBsYXN0RWZmZWN0
LT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgICAgICAgICBsYXN0
RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0
YTo6QnVpbHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCmluZGV4IGJjNjBhY2I1MDI1MjExMTMxZWRjY2UzNjRkNjFjNmU5YmNmOTA3
ZjMuLmU1NjExODNiMzQ5OGY0NGQxMzU2YmFkMTYyYTdjM2JiNWFkMGMzNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC03
NiwxMCArNzYsNyBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogCiB2b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFs
d2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGI1OGQ1MWIxOTdkOGM1ZmM2NGFmYzU1ODE5ZjE1
ODVkOTkyM2JjOGMuLjc4MDM5Y2NmODA2YjY3NDcwN2QwOTQ5Y2FhYjc2ODE1NGQ4OTczMWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
QEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUltYWdlKFNvdXJjZUlt
YWdlJiYsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlz
IGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQorCiAg
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBmaW5hbDsK
IAogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444871</attachid>
            <date>2021-11-19 17:03:59 -0800</date>
            <delta_ts>2021-11-20 03:10:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211119170358.patch</filename>
            <type>text/plain</type>
            <size>94110</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uY2FkNmFmMTRlZGMwMjBkOTMyMGQ4M2M5MmFiNWYx
YzY5NTkzM2Y1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAyMS0xMS0xOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9u
IG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAg
IHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNh
bGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3Jl
YXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUg
b25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBj
YWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVl
c3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0
ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgIFRoZSBk
ZWZhdWx0IG9mIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZSBpcyBzUkdCLiBCdXQgaXQgd2lsbCBi
ZSBzZXQgdG8gCisgICAgICAgIGxpbmVhclJHQiBpZiB0aGUgY29sb3IgaW50ZXJwb2xhdGlvbiBv
ZiB0aGUgZmlsdGVyIGVmZmVjdCBlbGVtZW50IGlzIAorICAgICAgICBsaW5lYXJSR0IuIFRoZSBv
bmx5IGV4Y2VwdGlvbiBpcyB0aGUgRkVJbWFnZSB3aG9zZSByZXN1bHQgaGFzIHRvIGJlIGluIAor
ICAgICAgICBzUkdCIGFsd2F5cy4KKworICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUg
cmVzdWx0IENvbG9yU3BhY2UgaXMgdGhlIG9wZXJhdGluZyBDb2xvclNwYWNlLgorICAgICAgICBU
aGUgb25seSBleGNlcHRpb24gaXMgRkVEaXNwbGFjZW1lbnRNYXAgd2hvc2UgcmVzdWx0IGhhcyB0
byBiZSBpbiB0aGUgCisgICAgICAgIENvbG9yU3BhY2Ugb2YgaXRzIGZpcnN0IGlucHV0IEZpbHRl
ckVmZmVjdC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6Cisg
ICAgICAgIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkg
dGhlIG9wcG9zaXRlIAorICAgICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhl
bHMoKS4gQ29ycmVjdGluZyB0aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBi
ZSBkb25lIGJ5IEZpbHRlckVmZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVsSW5kZXgg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6
aXNEZWdlbmVyYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseURlZ2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVSZXN1bHQpOgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4g
YmUgZG9uZSBieSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpwaXhlbEJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmdldFBpeGVsQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVBpeGVsQnVmZmVyUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1
bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIFRoZSBsb2dpYyBvZiBtYW5h
Z2luZyB0aGUgcmVzdWx0IGltYWdlIGFuZCBidWZmZXJzIHdhZCBtb3ZlZCB0byB0aGUgY2xhc3MK
KyAgICAgICAgRmlsdGVySW1hZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUltYWdlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OnBpeGVsQnVmZmVyU2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9D
b2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmFic29sdXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlclNsb3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Nyb2xsIGFu
aW1hdGlvbiB3aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA5ZDc3NTQ4Y2RlYTBiNDdiMjIwNmJiNThkZTZkM2RhMDg0ZTVjNzQ4Li4yOGQ1ZGQzYjM1
ZWZjNjdlODNlMzRlMmE2MTk1MzUxMmMyMGI3ZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEwMCw2
ICsyMTAwLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlhYmUxODk4NjBk
OGRjNTlhOGMwMzQ4ZDU1OWE3N2Q1NDliMGM3NjUuLjU2ZDM3MjkxMjcwYmUzNDY0ZDFiYTM5MDY4
YjRkZTM5Mjk1NWViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODU2LDYgKzEwODU2LDggQEAKIAkJNzIxQjQ5NkYyNTEy
QUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI0MzVF
RjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU5MjksNiArMjU5MzEsOCBAQAogCQkJ
CTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLywKIAkJ
CQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAogCQkJ
CTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJCTcy
NDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzI0MzVF
RjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA4YjQwMDE3NzAwZTEwYzY4
N2JhNzA2ZTU1OTZiOGMwYjIzMGJhMjRlLi40OTYxNWZkZTgzZWVkNDMwZmUxZTVjMTU3OGMwNjli
MjM2NjM3MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYKICAg
ICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KICAgICBlZmZlY3Qu
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0
Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAgICBpZiAo
ZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggYjM2YjY0
N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOC4uMWViY2RiYzk0ZjI4YzZhYThiMzJj
NjU2YzJiYjFmNGQ0ZGIxZjIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEx
MSwyMyArMTExLDI2IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZp
bHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEgPSBpbi0+
cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8gc291cmNl
UGl4ZWxCdWZmZXJBID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0
IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUIgPSBp
bjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBhdXRvIHNv
dXJjZVBpeGVsQnVmZmVyQiA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAgIHVu
c2lnbmVkIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPSBzb3VyY2VQaXhlbEFycmF5QS0+bGVuZ3Ro
KCk7Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc291cmNlUGl4ZWxBcnJheUItPmxl
bmd0aCgpKTsKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5QSA9IHNvdXJjZVBpeGVsQnVmZmVy
QS0+ZGF0YSgpOworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXlCID0gc291cmNlUGl4ZWxCdWZm
ZXJCLT5kYXRhKCk7CisgICAgCisgICAgdW5zaWduZWQgc291cmNlUGl4ZWxBcnJheUxlbmd0aCA9
IHNvdXJjZVBpeGVsQXJyYXlBLmxlbmd0aCgpOworICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3Ro
ID09IHNvdXJjZVBpeGVsQXJyYXlCLmxlbmd0aCgpKTsKIAogICAgIGlmIChzb3VyY2VQaXhlbEFy
cmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxB
cnJheUEtPmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUIuZGF0
YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qg
b25lIHBpeGVsIHdlIGV4cGFuZCBpdCB0byB0d28uCkBAIC0xMzUsOCArMTM4LDggQEAgYm9vbCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICB1aW50MzJf
dCBzb3VyY2VBWzJdID0gezAsIDB9OwogICAgIHVpbnQzMl90IHNvdXJjZUJBbmREZXN0WzJdID0g
ezAsIDB9OwogCi0gICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihz
b3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpKVswXTsKLSAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsK
KyAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVs
QXJyYXlBLmRhdGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUIuZGF0YSgpKVswXTsKICAgICBwbGF0Zm9y
bUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOwog
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggMWExMzc1ODgxZTJhMjk2NDA4MDBjZjIzZmNl
MGFkYjAyMTcxODAwNi4uYzkxYWEzZDY4ZDVkZmY1MzM5MWZlMGQ3ZDk4Yjc5YTZiNmQ1Mjg2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01OSwxNiArNTksMTYgQEAgYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGlu
Mi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOwogICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKaW5kZXggNjc5ZTc4ZGFlYTg3M2Y1ZDMzYTFhZmY4NzE1MjViZmNm
ODc3MTBmYi4uNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0OWQ3ZDE2OTdkYzE0ZjkyYjY3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwCkBAIC0yNzcsMTEgKzI3NywxMSBAQCBib29sIEZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
IChpbkJ1ZmZlcikKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDk3N2NhNWI1
Nzg0MTM0M2U3MThmNDIwMTVkYjQxMjRjN2UwYWVmZWEuLjBjNzg5NWU2NTNiODEyMzg0NzZkYjhj
ZTUzZWQxZWU2NWUyOWUxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAt
MTA1LDEyICsxMDUsMTAgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAgTG9va3Vw
VGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7CkBAIC0xMTgsOSAr
MTE2LDEyIEBAIGJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5U
YWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhl
bEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOworCisg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQg
Kz0gNCkgewogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxP
ZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRh
W3BpeGVsT2Zmc2V0ICsgMV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCAyNWFjMDA4NDI0YmQ4NjMx
MTg0Nzg5MDk1MGJjZjYzZTVhZWY1ZmE4Li41MmFmYWJkODdkMGJhMGI2YWMyOGMzNTc1YjczMjU4
YmFmZGZjMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtODcsMTQgKzg3LDYgQEAgYm9vbCBGRUNv
bXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVD
b21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlw
ZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQotICAgIAogc3RhdGljIHVu
c2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnVmZltd
ID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CkBAIC0yMjksMzQg
KzIyMSwzNSBAQCBib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAg
aWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZm
ZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQorICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQnVm
ZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBp
bjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpbjItPmNvcHlQ
aXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0QkRyYXdpbmdS
ZWN0KTsKIAotICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4ZWxB
cnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAg
ICAgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKKyAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoc291cmNl
UGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjIt
PmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgogICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGNmZDI0Y2FmZWIwNTg2MzcwN2I5
NGQ4OWEwOTY3ZjgxN2ZiYzhkNmQuLmE4NzZhOTVkM2Y3MTkyZDA2MmZmODRhM2EwNmUwZTZmMzM3
NDY4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTU5LDEyICs1OSwxMCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCByZXF1aXJlc1ZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCisgICAgYm9vbCBtYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUg
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQorCiAgICAgYm9vbCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4
IDkzZjZkZjg3YThjYmQzYzE2NDI0M2YyNDM2MDRkY2VlZWI4MWE2NjQuLmUwZDYzYzM2ZGIxMjhi
MTFiY2JhZDM0YTBhYWVlNmI5ODRhM2ZiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApA
QCAtMzY1LDI2ICszNjUsMjIgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2
ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBp
eGVsQnVmZmVyUmVzdWx0KG1fcHJlc2VydmVBbHBoYT8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKLSAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJj
ZVBpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1
ZmZlclJlc3VsdChtX3ByZXNlcnZlQWxwaGEgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXNvdXJjZVBp
eGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRTaXplIHBhaW50U2l6
ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIAorICAgIGF1dG8mIHNvdXJjZVBp
eGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKwogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAor
ICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAogICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXks
CiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDJkZmQ4NTc2ZjdmMWUwMmYxZDAzNDkx
OTVkZDBjMjVmNDY0NDM2ZGMuLjg5ZDYzYjJjYTg5NzgxNjYwMTdhMTU1MWUzNjU4NTM2ODQyZDRh
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC02OCwxMyArNjgsMTMgQEAgYm9v
bCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
RkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoKSBjb25zdAogewogICAgIC8vIFNw
ZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxp
ZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0
byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFp
biBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgotICAgIC8vIFRoZSByZXN1bHQg
aXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQg
b2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNl
KGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkpOworICAgIC8vIFRoZSByZXN1bHQg
aXMgaW4gdGhhdCBzYW1lIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQg
b2YgdGhlICdpbicgaW1hZ2UuCisgICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xv
clNwYWNlKCk7CiB9CiAKIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluZGV4KQpAQCAtOTgsMjMgKzk4
LDI2IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5O
RUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VO
S05PV04pOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVz
dWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5n
UmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIC8vIFRo
ZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUg
cGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAgICBhdXRv
IGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdp
bmdSZWN0KTsKKyAgICBhdXRvIGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyID0gaW4yLT5nZXRQaXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGVm
ZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCi0gICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFj
ZW1lbnRJbWFnZSkKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwgIWRpc3BsYWNlbWVudFBp
eGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoaW5wdXRJbWFn
ZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKyAgICBhdXRvJiBp
bnB1dEltYWdlID0gaW5wdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRpc3BsYWNl
bWVudEltYWdlID0gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIEFTU0VS
VChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLmxlbmd0aCgpKTsKIAog
ICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAKQEAg
LTEzNSw4ICsxMzgsOCBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
cGFpbnRTaXplLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5k
ZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkg
KyBzY2FsZWRPZmZzZXRYKTsKLSAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlv
bkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CisgICAgICAg
ICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlz
cGxhY2VtZW50SW1hZ2UuaXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5l
bFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UuaXRlbShkZXN0aW5h
dGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAKICAg
ICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbklu
ZGV4KTsKICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0
aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CkBAIC0xNDQs
NyArMTQ3LDcgQEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwo
c3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLmRhdGEoKSArIGJ5dGVP
ZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCAzY2QwNWNjNDk1NTE3MTk5YWNkYzg4ZWQ1MTM3
NjY0MzYwNmI5MjVlLi45OTAxNDI2MWNiODJlOWRhMjBiOWUwM2Y4ZGVkYzIyNTY4M2MxMmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC00NywxOCArNDcsMTggQEAgcHVibGljOgogICAg
IGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2Nh
bGUoZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAg
IEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rvciwg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBpbnQg
eENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0K
KyAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBv
dmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAppbmRleCBjMTczOTBhMWE3NjIxNWUxNjkzYTNkN2ZkYjdiYTk2YzEy
ZDM5ZTdiLi5iNjJhYjY4NGNkOTFlZmM3N2YxOGExNjRlOTVhNDU5NGZjNzY4NThlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
bldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQu
bW92ZShvZmZzZXQpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdl
QnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAKaW5kZXggMjQzMWU3OTE1NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQyOGYxYWM2Yi4uMjgw
OWI0YjE3NWQzMjU1ZDIxMDc0OTkxNmViM2VkMDUwMTM1NjVhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC02MCw3
ICs2MCw3IEBAIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0
eSkKIAogYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
IHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCAxMzM4MjMx
Y2VkYjFkOWE5YTdjZmQ5MThlNGYzOWRhNjcwNjFjYzcxLi45YzEzZTVkNGViYThjOGM5YmM5ODRk
YzYzOTQ3MGJjNDhjOTQzNWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMzksOCArMzksNyBAQCBwdWJsaWM6CiAjaWYg
IVVTRShDRykKICAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0gY29sb3IgaW50ZXJwb2xh
dGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMgaW4gdGhlIGN1cnJlbnQK
ICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBjb2xvci1pbnRl
cnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQotICAgIHZvaWQg
c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlk
ZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7IH0KKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNTBiMmMxZTAyZDlkODhjOTFmY2NlODQ1MmJiYzkxOTg1
MTg5NGQ1ZS4uNGM1ZmFiMDFhMzM5NTdlOGZlOTIxNTZkNTA3OTE2N2Q0YmU5YzBmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUyMywxNiArNTIzLDE0IEBAIGJvb2wgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBzZXRJc0FscGhh
SW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlu
LT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERy
YXdpbmdSZWN0KTsKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIApAQCAtNTQzLDYgKzU0MSw3IEBAIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBpZiAoIXRtcEltYWdlRGF0
YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIHBsYXRmb3JtQXBwbHko
ZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCks
IGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAppbmRleCBlODNjZjNiN2NkNjM2ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRhMTgy
Li5lYjA3ZmQxYTllMTc4NDJjMmMxYWE1MGQzMTgwZGRkOWE5MzQxZTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKQEAgLTQ3NSwyMiArNDc1LDIyIEBAIGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAogICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKKwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtl
cm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQg
dGhlIFczCiAgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90
aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZv
ciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSBy
ZWxpYWJsZS4KICAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNl
IHRoZSBpbXBsZW1lbnRhdGlvbgogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBkcmF3TGlnaHRpbmcoZGVz
dGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBh
aW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAxMWJj
ODc5NTc4N2VhNDIxN2YwODA2ZjdjNTYzZTBmNThhYzVhMDJjLi5jZWExOTdjZjhhMTc2N2M5ZGQ0
ZmQ0ZWUwMzNmNjZmZmQxZjgzOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTQzLDE0ICs0MywxNCBAQCBib29s
IEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIHVuc2ln
bmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwogICAgIEFTU0VSVChzaXplID4gMCk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKKyAgICAgICAgaWYgKGF1dG8gaW5CdWZmZXIgPSBpbi0+
aW1hZ2VCdWZmZXJSZXN1bHQoKSkKICAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQzMjg4ZDllNTky
ZjAyODI4Mzg0MmU3OTI0YjcxMTVmYzhmNmMyNzYuLmIyMjNjYjllNTY2MzY5NTljM2Y5MWI4NjFl
NmRhMTdjMDM2ZGEzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTIyOSw0NyArMjI5LDQ3IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQogICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFp
bnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCitib29sIEZFTW9ycGhvbG9n
eTo6aXNEZWdlbmVyYXRlKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgY29uc3QKIHsKLSAgICBp
ZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGlu
LT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8ICghcmFk
aXVzWCAmJiAhcmFkaXVzWSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIElu
dFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRp
dXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkp
KQorICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkp
IHsKKyAgICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJhZGl1cyA9IGZsb29yZWRJ
bnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kg
fSkpOwogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgo
KSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVj
dERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1c1gs
IHJhZGl1c1kpKSB7CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCisgICAgfQorCisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXNvdXJjZVBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhl
bEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKICAgICBQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0g
c291cmNlUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9
ICZzb3VyY2VQaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRl
c3RpbmF0aW9uUGl4ZWxBcnJheTsKICAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZl
Y3REcmF3aW5nUmVjdC53aWR0aCgpKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggMjg4ZWVhMGUx
ZTIxM2NlMzJkODE3MzBiNjE5OWRkNWUwNDFjOTYzZC4uZGI4NzBhZTdkZjUwNGUxOWM0ZDA1MTNm
OGQ0MjFiMDFmY2NjMWQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZh
dGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJv
b2wgcGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKTsK
KyAgICBib29sIGlzRGVnZW5lcmF0ZShpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpIGNvbnN0Owog
CiAgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CiAgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5KiBzcmNQaXhlbEFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMTQ1NTdhMzFkNzA5NzIzNjIyZDc2
NjMwYWFjNzI4M2JiMjY1Zjc4Li40MzE0YTFhNTYxMjRlZDFjODM2MDljOThjMGI5ZmMxYTVkMjJj
NGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNjgsOCArNjgsOCBAQCBib29sIEZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCmluZGV4IDRmZTI0YTRmMjYyYjE3NDIyZTc4M2I0NzYwZjMzMTUwMTg1MmRjMTgu
LmE5ZTIxMzM3YjBkMjc0ZTU0ODBkZjY3NjBmODk3YzcyMDE5ZTU0OGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTQ0
LDExICs0NCwxMCBAQCBGRVRpbGU6OkZFVGlsZSgpCiAKIGJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0
NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1
dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAppbmRleCBkYTQ3NGY0MTA1ZjE2NGU0ZGRlZTQ4YjZjYWI5ZGI4Zjgz
YTFhN2ZlLi4yNjU3NzY2M2NjNjMyNzdiZTJkYWEzNjQwOTY4NGIxZDcyMjI2OWExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIGJvb2wgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZm
ZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCmluZGV4IDQxYmZjMzY0YTMzOTBiNjhiOTIxOGIxYmYyZmI5OTgxOTNiN2U0
NjAuLmFhMTBhN2VmMDE4MzA2MmZiMWU2ZWUyMDY3ZTM3OGM5NmVkOGJlMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKQEAgLTI3LDI5ICsyNywxMyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZp
bHRlckVmZmVjdDo6VHlwZSB0eXBlKQotICAgIDogRmlsdGVyRnVuY3Rpb24odHlwZSkKLXsKLX0K
LQogdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKQEAgLTE1Nyw3
ICsxNDEsNiBAQCBib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiAgICAgfQogCiAgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBz
ZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAKICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCiAgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKQEAgLTE3MSw0NjggKzE1
NCw3NiBAQCBib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAg
ICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgaWYg
KCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgICAgICBpbi0+Y29ycmVjdFByZW11
bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgIH0KKyAgICAKKyAgICBpZiAoIWNyZWF0ZVJl
c3VsdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBZGQgcGxhdGZvcm0gc3Bl
Y2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgogICAgIHJldHVy
biBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoZmlsdGVyKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpjcmVh
dGVSZXN1bHQoKQogewotICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1
bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8m
IGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5
TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3Vy
IGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVs
QXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAg
aWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVs
ID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAg
dWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsw
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
MV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4
ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgo
cGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsK
LSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhl
bEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBw
aXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBj
aGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5
Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhl
IDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAz
KTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1l
bnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBp
eGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KKyAg
ICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXN1bHRDb2xvclNwYWNlKCkpOworICAg
IHJldHVybiBtX2ZpbHRlckltYWdlOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHQoKQogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7CiB9
CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogewogICAgIC8v
IENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhh
cwogICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJy
b25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQo
KTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOworICAgIGNsZWFyUmVzdWx0KCk7
CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgZWZmZWN0
LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQogICAgIGlmICghaGFzUmVzdWx0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgLy8g
RklYTUU6IFJlc3BlY3QgdGhlIEZpbHRlcjo6cmVuZGVyaW5nTW9kZSgpIHdoZW4gY3JlYXRpbmcg
dGhlIGZpbHRlciBJbWFnZUJ1ZmZlciByZXN1bHQuCi0gICAgLy8gRm9yIG5vdyBqdXN0IHBhc3Mg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZC4gVGhpcyB3aWxsIG5vdCBiZSBhIGJlaGF2aW9y
IGNoYW5nZSBzaW5jZQotICAgIC8vIHRoaXMgaXMgd2hhdCB3ZSBkbyBmb3IgdGhlIHNvZnR3YXJl
IGZpbHRlciBjb2RlIHBhdGggYW55d2F5LgotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3Zl
cmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVs
QXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1
bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5
OworICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5pbWFnZUJ1ZmZlcigpOwogfQogCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK1BpeGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCiB7Ci0gICAgSW50U2l6ZSBzY2FsZWRT
aXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzY2FsZWRTaXplKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJl
YTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAg
IGlmICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwg
Y29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhl
IGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJl
ZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVj
dC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkg
fHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQot
ICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0
aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3Qu
bWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkg
fHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVz
dCA9IDA7Ci0gICAgaWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47
Ci0gICAgICAgIHhPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3Qu
bWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAg
IHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2Nh
bGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsK
LSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQot
ICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0
aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNl
U2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0
LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9
IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4
T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1
dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5w
dXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBk
ZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0g
ICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgp
KTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQg
PSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVu
dCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VD
b21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNd
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8g
MjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
LSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9u
ZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21w
b25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJj
ZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRb
M107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50
Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAw
OwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNv
bXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0K
LSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBG
SVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50
UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAg
ICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGlu
YXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3Jl
IGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBvcGVyYXRp
bmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihw
aXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAgIHJldHVybiBtX2ZpbHRl
ckltYWdlLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXIm
IGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1v
cmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQot
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNl
IGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVy
bmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAg
Y29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCBy
ZWN0KTsKLSAgICAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZv
cm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJu
IGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKLX0KLQotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4g
bV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9y
U3BhY2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVs
QnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24n
dCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxC
dWZmZXIpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0OjpnZXRQaXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
IHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAg
ICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9
OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAg
ICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNl
IH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6
OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9y
U3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVz
KG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwor
ICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5nZXRQaXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCwgc291
cmNlUmVjdCwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQaXhlbEJ1ZmZlclJlc3VsdChQaXhlbEJ1ZmZlciYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBj
b252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwot
Ci0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCku
Y29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQs
IGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWlu
Z0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5h
dGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIG1fZmlsdGVySW1h
Z2UtPmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0KTsK
IH0KIAotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQo
KQogewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMsIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0g
ICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBl
ZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LmNoYXJhY3RlcnM4KCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJl
c3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVw
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJz
OCgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0g
ICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVz
dWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7
Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0j
aWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5l
ZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdl
IG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMg
ZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlw
dWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiBy
ZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCisgICAgaWYgKCFoYXNSZXN1bHQoKSB8fCAhbWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpbHRlcklt
YWdlLT5jb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CiB9CiAKIHZvaWQgRmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQogewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBo
YW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BB
UkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkg
fHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKKyAgICBpZiAo
IWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2
b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBi
eSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtw
cmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNm
b3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENv
bG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gc3RkOjpudWxsb3B0OwotI2VuZGlmCisgICAgbV9maWx0ZXJJbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKQEAgLTY0Myw4ICsyMzQsOCBAQCBU
ZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVAogICAgIGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVw
cmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGlt
YWdlIiwgbV9hbHBoYUltYWdlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcg
Y29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOworICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNlIiwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIHJlc3Vs
dENvbG9yU3BhY2UoKSk7CiAgICAgICAgIHRzIDw8ICJcbiIgPDwgaW5kZW50OwogICAgIH0KICAg
ICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBjMDc1MjYzMTRmN2U3NzgxMjVlMDA1N2Ji
MDNiMTFjZjlkMDE3YjViLi4zMTYyYmQwNzRhYjEwYTNhOWEzMzY4NmQ3MzQ2ZTBjMzY3MDIzZmNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKQEAgLTIyLDE3ICsyMiwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEZXN0aW5hdGlv
bkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKICNpbmNsdWRl
ICJGaWx0ZXJGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRl
bnQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NDYsMjYgKzQwLDIyIEBAIGNsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBGaWx0ZXJFZmZlY3Qg
OiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgorICAgIGJvb2wgY3JlYXRlUmVzdWx0
KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCk7CiAKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsdGVySW1hZ2U7IH0KKwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Cisg
ICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb24p
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBj
b3B5UGl4ZWxCdWZmZXJSZXN1bHQoUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIGNvbnN0OworICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOworICAgIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZl
Y3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVm
ZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQogICAg
IAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBU
aGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9y
eSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQot
CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYp
IGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNv
bnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKQEAgLTEyMyw4ICsxMTMsOCBAQCBwdWJsaWM6CiAK
ICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotICAgIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNw
YWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX3Jlc3VsdENv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5n
Q29sb3JTcGFjZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KICAgICB2b2lkIHRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CkBAIC0xMzgsMzYgKzEy
OCwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KFR5
cGUpOwotICAgIAotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rp
b247CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRl
IGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFsw
LDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwg
Zm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG1heVByb2R1Y2VJbnZh
bGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2
b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOwogCi0gICAgdm9pZCBj
b3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0Nv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25z
dCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCiAgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVm
ZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwog
CiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApAQCAtMTk1LDEyICsxNjcs
NyBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1p
dGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMg
aW5wdXRzLgogICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxF
KERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6Okxp
bmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRp
bmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgot
ICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjcwOTJlNGMxYmJhZDA0MjMxMmE2YjI4NTdlMjdm
ZjVmY2Y0NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lO
VFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBJ
bnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJbWFnZShhYnNvbHV0ZUltYWdlUmVjdCwg
cmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1h
Z2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDog
bV9hYnNvbHV0ZUltYWdlUmVjdChhYnNvbHV0ZUltYWdlUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5n
TW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmICht
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAg
IG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVJbWFnZVJlY3Qu
c2l6ZSgpLCBtX3JlbmRlcmluZ01vZGUsIDEsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBpbWFnZVJlY3QgPSBJbnRSZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0
LnNpemUoKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KSwgaW1hZ2VSZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFBpeGVsQnVmZmVyJiBz
b3VyY2VQaXhlbEJ1ZmZlciwgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCit7
CisgICAgQVNTRVJUKHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSA9PSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLnNpemUoKSk7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIuc2l6ZSgpOworICAgIHVuc2lnbmVkIHJvd0J5dGVzID0gZGVzdGluYXRpb25T
aXplLndpZHRoKCkgKiA0OworCisgICAgQ29uc3RQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IHNv
dXJjZSB7CisgICAgICAgIHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpLAorICAgICAgICByb3dC
eXRlcywKKyAgICAgICAgc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKQorICAgIH07CisK
KyAgICBQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IGRlc3RpbmF0aW9uIHsKKyAgICAgICAgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci5mb3JtYXQoKSwKKyAgICAgICAgcm93Qnl0ZXMsCisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKQorICAgIH07CisKKyAgICBjb252
ZXJ0SW1hZ2VQaXhlbHMoc291cmNlLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25TaXplKTsKK30K
Kworc3RhdGljIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZVBp
eGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyUmVjdCA9IElu
dFJlY3QgeyB7IH0sIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSB9OworICAgIGF1dG8gc291cmNl
UmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oc291cmNlUGl4ZWxCdWZmZXJSZWN0LCBzb3VyY2VS
ZWN0KTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlclJlY3QgPSBJbnRSZWN0IHsg
eyB9LCBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNpemUoKSB9OworICAgIGF1dG8gZGVzdGluYXRp
b25SZWN0ID0gc291cmNlUmVjdENsaXBwZWQ7CisKKyAgICBpZiAoc291cmNlUmVjdC54KCkgPCAw
KQorICAgICAgICBkZXN0aW5hdGlvblJlY3Quc2V0WCgtc291cmNlUmVjdC54KCkpOworCisgICAg
aWYgKHNvdXJjZVJlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFkoLXNv
dXJjZVJlY3QueSgpKTsKKworICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoZGVzdGluYXRp
b25QaXhlbEJ1ZmZlclJlY3QpOworICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGlu
YXRpb25SZWN0LnNpemUoKSk7CisKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBz
b3VyY2VSZWN0LnNpemUoKSkKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5kYXRhKCku
emVyb0ZpbGwoKTsKKworICAgIENvbnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmlldyBzb3VyY2Ug
eworICAgICAgICBzb3VyY2VQaXhlbEJ1ZmZlci5mb3JtYXQoKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KDQgKiBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKSksCisgICAg
ICAgIHNvdXJjZVBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCkgKyBzb3VyY2VSZWN0Q2xpcHBlZC55
KCkgKiBzb3VyY2UuYnl0ZXNQZXJSb3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0CisgICAg
fTsKKworICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRpb24geworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLmZvcm1hdCgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oNCAqIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2l6ZSgpLndpZHRoKCkpLAorICAg
ICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCkgKyBkZXN0aW5hdGlvblJl
Y3QueSgpICogZGVzdGluYXRpb24uYnl0ZXNQZXJSb3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICog
NAorICAgIH07CisKKyAgICBjb252ZXJ0SW1hZ2VQaXhlbHMoc291cmNlLCBkZXN0aW5hdGlvbiwg
ZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
JiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJTbG90KEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxw
aGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdl
OjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAg
IGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KTsKKyAgICBp
ZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKwor
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fY29sb3JTcGFjZSB9OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gSW50UmVjdCB7IHsg
fSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVm
ZmVyID0gaW1hZ2VCdWZmZXJTbG90KCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1
ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAm
cGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhpbWFnZVJlY3Quc2l6ZSgpKSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBp
ZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAg
ICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weUltYWdl
Qnl0ZXMoKnNvdXJjZVBpeGVsQnVmZmVyLCAqcGl4ZWxCdWZmZXIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyU2xvdChBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weUlt
YWdlQnl0ZXMoKnNvdXJjZVBpeGVsQnVmZmVyLCAqcGl4ZWxCdWZmZXIpOworICAgIH0KKworICAg
IHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
YWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNvdXJjZVJlY3Quc2l6ZSgpKSk7CisKKyAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xv
clNwYWNlPyAqY29sb3JTcGFjZSA6IG1fY29sb3JTcGFjZSB9OworCisgICAgYXV0byBwaXhlbEJ1
ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzb3VyY2VSZWN0LnNpemUoKSk7
CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGNvcHlQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworICAgIHJldHVy
biBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lv
biB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBB
TkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBj
b2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8g
QWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNH
CisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUoc291cmNlUmVjdC5zaXplKCkpOworCisgICAgYXV0byBjb252ZXJ0
ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7
CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5
IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZl
cnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBz
b3VyY2VSZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZElt
YWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNvdXJjZVJlY3QpOworfQorCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIHNv
dXJjZVJlY3QgPSBJbnRSZWN0IHsgeyB9ICwgc291cmNlUGl4ZWxCdWZmZXIuc2l6ZSgpIH07Cisg
ICAgYXV0byBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShzb3VyY2VSZWN0
LnNpemUoKSk7CisKKyAgICBhdXRvJiBzb3VyY2VDb2xvclNwYWNlID0gc291cmNlUGl4ZWxCdWZm
ZXIuZm9ybWF0KCkuY29sb3JTcGFjZTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwg
c291cmNlQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1
dFBpeGVsQnVmZmVyKHNvdXJjZVBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0KTsKKyAgICByZXR1cm4g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgc291cmNl
UmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZl
cihQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCkKK3sKKyAgICBhdXRvIGFscGhhRm9ybWF0ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci5mb3JtYXQoKS5hbHBoYUZvcm1hdDsKKyAgICBhdXRvJiBjb2xvclNwYWNlID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci5mb3JtYXQoKS5jb2xvclNwYWNlOworICAgIAorICAgIGF1dG8qIHNvdXJj
ZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZl
clNsb3QoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworICAgIGlmICghc291cmNlUGl4
ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IGltYWdlQnVmZmVyU2xvdCgpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0
IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9OworICAgICAgICAgICAgICAgIGlm
IChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmlt
YWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRQaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc291cmNlUGl4ZWxCdWZmZXIgPSB0aGlzLT5w
aXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0
ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpzb3VyY2VQaXhlbEJ1ZmZl
ciwgYWxwaGFGb3JtYXQsIGNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMo
KmNvbnZlcnRlZFBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKCpzb3VyY2VQ
aXhlbEJ1ZmZlciwgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7Cit9CisKK3Zv
aWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAg
IC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRz
IGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFn
ZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90
KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0
aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRl
cyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5
TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChw
aXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBp
eGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAg
ICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4
eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAg
IHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNp
eHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVs
RGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAg
ICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJh
eUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxB
cnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tp
bmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAg
IHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGgg
Ynl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Cisg
ICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRo
ZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewor
ICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERh
dGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3Zv
aWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBz
cGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNl
KTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5u
ZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBz
cGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMu
CisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAg
ICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpOworCisgICAg
bV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3Rk
OjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNmE5OGUyNzdlYTk5MDhiOGI2YWZkYWUwYzU3MjQ4NmYwMjU2YjdjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOwor
Y2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlckltYWdlIDogcHVibGljIFJlZkNvdW50
ZWQ8RmlsdGVySW1hZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdl
PiBjcmVhdGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgSW50UmVjdCBhYnNvbHV0ZUlt
YWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3Q7IH0KKworICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9k
ZTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
KCk7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24p
OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQ
aXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCk7CisKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIoKTsKKyAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2UpOworCitwcml2YXRlOgorICAgIEZpbHRlckltYWdlKGNvbnN0IEludFJlY3QmIGFic29s
dXRlSW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyU2xvdCgpIHsgcmV0dXJu
IG1faW1hZ2VCdWZmZXI7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxC
dWZmZXJTbG90KEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Bp
eGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+KSBjb25zdDsKKworICAgIEludFJlY3QgbV9hYnNvbHV0ZUltYWdlUmVjdDsKKwor
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZm
ZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
aW5kZXggY2ZiNTc0NGE3ZGE2Njg2NzlhMWJkODUxOGFlNWIyZGYzZDgyY2EzZS4uOGZhNDQyYjhk
OWQ1M2E5OWVmNWNhMTU4ODI2NjM1MGRhNmJhNTg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTQ3
LDcgKzQ3LDcgQEAgdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKIGJvb2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCBmYTIxMGM3MjA3NDFl
NDM1Mjc2ZWQ1ZWYyMTFkNzcyNjM3Yzk3NzZjLi5lY2RlNDMxZjliOWIwNjQ0MTNlYTA1YjYwZGRj
YjkyZTU4OThjNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTM0LDcgKzM0LDYgQEAgUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpCiBTb3VyY2VHcmFwaGljOjpT
b3VyY2VHcmFwaGljKCkKICAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWMpCiB7Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7CiB9CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCkBAIC00NSw3ICs0NCw3IEBAIHZv
aWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAKIGJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0
ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA0YTA1MGIxNjk1OTk5
MTJkMDczZWZkZDdhMzcwMzU1MjhlMzI1MTJjLi5mMGEyNjViZjY3MGE5ODNjZDYyMTUwNjVkMTY3
OGJhMjI0MjkyNTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkp
IHsKICAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsK
ICAgICAgICAgICAgIGZpbHRlckRhdGEuZmlsdGVyLT5hcHBseSgpOwotICAgICAgICAgICAgbGFz
dEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7CisgICAgICAgICAgICBsYXN0
RWZmZWN0LT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgICAgICAg
ICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKICAgICAgICAgfQogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmls
dGVyRGF0YTo6QnVpbHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDU1NDAwYjdlYmEzZTRmNmMyYmVkOTg0YmNjYjUxZDIz
N2UzNDQ0N2EuLjNmZWNmMWYzNDRlMWM3ZjZhNmEyYTYwOTExOTUyMTg0YjYxNmQ2MzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CkBAIC03NiwxMCArNzYsNyBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiBib29sIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICAvLyBGRUltYWdlIHJlc3VsdHMg
YXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCAzNGY3MWJhODQ2ZWMwZmYyZGQ2ODI3MDE2
ZDlhMDU4OTRjYjRlOGQ5Li5kYTdlNDdiZDE4ZjU0NGEyZTUyMzc3MWQyMzkyN2Q3MjJhOTlhYjVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5oCkBAIC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVJbWFnZShTb3Vy
Y2VJbWFnZSYmLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKKyAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFs
d2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0K
KwogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgZmlu
YWw7CiAKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5h
bDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444892</attachid>
            <date>2021-11-20 03:10:16 -0800</date>
            <delta_ts>2021-11-20 03:42:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211120031015.patch</filename>
            <type>text/plain</type>
            <size>93134</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uNDc1NzQyNDk1Y2M2YTRlODg5Y2RkM2FjMzg2Yzgw
MmNjZDRjNzE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9u
IG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAg
IHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNh
bGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3Jl
YXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUg
b25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBj
YWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVl
c3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0
ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgIFRoZSBk
ZWZhdWx0IG9mIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZSBpcyBzUkdCLiBCdXQgaXQgd2lsbCBi
ZSBzZXQgdG8KKyAgICAgICAgbGluZWFyUkdCIGlmIHRoZSBjb2xvciBpbnRlcnBvbGF0aW9uIG9m
IHRoZSBmaWx0ZXIgZWZmZWN0IGVsZW1lbnQgaXMKKyAgICAgICAgbGluZWFyUkdCLiBUaGUgb25s
eSBleGNlcHRpb24gaXMgdGhlIEZFSW1hZ2Ugd2hvc2UgcmVzdWx0IGhhcyB0byBiZSBpbgorICAg
ICAgICBzUkdCIGFsd2F5cy4KKworICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcmVz
dWx0IENvbG9yU3BhY2UgaXMgdGhlIG9wZXJhdGluZyBDb2xvclNwYWNlLgorICAgICAgICBUaGUg
b25seSBleGNlcHRpb24gaXMgRkVEaXNwbGFjZW1lbnRNYXAgd2hvc2UgcmVzdWx0IGhhcyB0byBi
ZSBpbiB0aGUKKyAgICAgICAgQ29sb3JTcGFjZSBvZiBpdHMgZmlyc3QgaW5wdXQgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0aGUg
b3Bwb3NpdGUKKyAgICAgICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCku
IENvcnJlY3RpbmcgdGhlIHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9u
ZSBieSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp5Q2hhbm5lbEluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVSZXN1bHQpOgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBi
eSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3ZlZCB0byBGaWx0ZXJJ
bWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFsaWRQcmVt
dWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weVBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlw
bGllZFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjp0cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6YWJzb2x1
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvbG9yU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlQnVmZmVySWZF
eGlzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Ny
b2xsIGFuaW1hdGlvbiB3aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA5ZDc3NTQ4Y2RlYTBiNDdiMjIwNmJiNThkZTZkM2RhMDg0ZTVjNzQ4Li4yOGQ1
ZGQzYjM1ZWZjNjdlODNlMzRlMmE2MTk1MzUxMmMyMGI3ZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MjEwMCw2ICsyMTAwLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlhYmUx
ODk4NjBkOGRjNTlhOGMwMzQ4ZDU1OWE3N2Q1NDliMGM3NjUuLjU2ZDM3MjkxMjcwYmUzNDY0ZDFi
YTM5MDY4YjRkZTM5Mjk1NWViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODU2LDYgKzEwODU2LDggQEAKIAkJNzIxQjQ5
NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWlu
TWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5N
YXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU5MjksNiArMjU5MzEsOCBA
QAogCQkJCTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAq
LywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICov
LAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAor
CQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJ
NzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VC
NjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VC
NjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA4YjQwMDE3NzAw
ZTEwYzY4N2JhNzA2ZTU1OTZiOGMwYjIzMGJhMjRlLi40OTYxNWZkZTgzZWVkNDMwZmUxZTVjMTU3
OGMwNjliMjM2NjM3MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgUmV0YWluUHRyPENJSW1hZ2U+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRl
ciYKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KICAgICBl
ZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBlZmZlY3Quc2V0
UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAg
ICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXgg
YjM2YjY0N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOC4uYjUyYjhhY2QzODNlYzgz
OTRkOWM3OGE5ZTE4M2Q0NTgyOWViZGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
QEAgLTExMSwxNyArMTExLDE3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8g
c291cmNlUGl4ZWxBcnJheUEgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIElu
dFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5
QiA9IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheUIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKICAg
ICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxl
bmd0aCgpOwogICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlC
LT5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCAxYTEzNzU4ODFlMmEyOTY0MDgwMGNmMjNmY2UwYWRi
MDIxNzE4MDA2Li5jOTFhYTNkNjhkNWRmZjUzMzkxZmUwZDdkOThiNzlhNmI2ZDUyODZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5jcHAKQEAgLTU5LDE2ICs1OSwxNiBAQCBib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVy
MikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAppbmRleCA2NzllNzhkYWVhODczZjVkMzNhMWFmZjg3MTUyNWJmY2Y4Nzcx
MGZiLi41YTkxYzRlY2M0NGZjNzdhYmZmZDQ5ZDdkMTY5N2RjMTRmOTJiNjc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKQEAgLTI3NywxMSArMjc3LDExIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKGlu
QnVmZmVyKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQx
MzQzZTcxOGY0MjAxNWRiNDEyNGM3ZTBhZWZlYS4uZGY4MGUwM2VkZDczMDBlZWU3YjA2YjNhZTQ3
ODNkNzJiNjdiYzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xMDUs
MTIgKzEwNSwxMCBAQCBib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBp
eGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJs
ZSBncmVlblRhYmxlOwogICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKQEAgLTExOCw5ICsxMTYs
MTIgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxl
LCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBk
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7Cisg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJh
d2luZ1JlY3QpOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSBy
ZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAx
XSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggMjVhYzAwODQyNGJkODYzMTE4NDc4OTA5NTBiY2Y2M2U1YWVmNWZhOC4uOWQ5MmUwMThhZGQw
M2ZmYzBiM2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0
ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsK
LX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1
bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1
NSwgMCB9OwpAQCAtMjI5LDM0ICsyMjEsMzUgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAg
YXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCk7CisgICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9
IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlcjIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKICAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCBj
ZmQyNGNhZmViMDU4NjM3MDdiOTRkODlhMDk2N2Y4MTdmYmM4ZDZkLi5hODc2YTk1ZDNmNzE5MmQw
NjJmZjg0YTNhMDZlMGU2ZjMzNzQ2OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01OSwxMiArNTksMTAg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0g
ICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBt
X3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiAgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAorICAg
IGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0K
KwogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAppbmRleCA5M2Y2ZGY4N2E4Y2JkM2MxNjQyNDNmMjQzNjA0ZGNlZWViODFh
NjY0Li41NGY4MDRhOGZlZDI1MTRlMjIxMDVlYTUyM2JjYmQ0ODU3Nzc3YjhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2NSwyNiArMzY1LDIzIEBAIGJvb2wgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGFscGhhRm9y
bWF0ID0gbV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZDsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKLSAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJj
ZVBpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1
ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKICAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewot
ICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKICAg
ICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwK
ICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApp
bmRleCAyZGZkODU3NmY3ZjFlMDJmMWQwMzQ5MTk1ZGQwYzI1ZjQ2NDQzNmRjLi5lN2MxYTIyOTli
NGU1MDdjNGY2OGI4Njg4YThkMDg1NzdjMDU1NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcApAQCAtNjgsMTMgKzY4LDEzIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxl
KGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xv
clNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UK
ICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUg
J2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xv
ciBzcGFjZS4KLSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRl
ckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JT
cGFjZSgpKTsKKyAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgorICAgIHJldHVy
biBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNv
bnN0IGludCBpbmRleCkKQEAgLTk4LDIzICs5OCwyNSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQVNTRVJU
KG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVs
dGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1
ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhl
bCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlw
bGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5t
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgYXV0byBkaXNwbGFjZW1l
bnRQaXhlbEJ1ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCisgICAgaWYgKCFpbnB1dFBp
eGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudElt
YWdlLT5sZW5ndGgoKSk7CisgICAgYXV0byYgaW5wdXRJbWFnZSA9IGlucHV0UGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBhdXRvJiBkaXNwbGFjZW1lbnRJbWFnZSA9IGRpc3BsYWNlbWVudFBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgQVNTRVJUKGlucHV0SW1hZ2UubGVuZ3RoKCkgPT0gZGlzcGxh
Y2VtZW50SW1hZ2UubGVuZ3RoKCkpOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKIApAQCAtMTM1LDggKzEzNyw4IEBAIGJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7CiAgICAg
ICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0Owog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkg
KyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9u
SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAg
ICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNw
bGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVs
WSkgKyBzY2FsZWRPZmZzZXRZKTsKIAogICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFy
cmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpIHsKQEAgLTE0NCw3ICsxNDYsNyBAQCBib29sIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5h
dGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0
ZXMpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNj
ZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUxMzc2NjQzNjA2YjkyNWUuLjk5MDE0MjYxY2I4MmU5ZGEy
MGI5ZTAzZjhkZWRjMjI1NjgzYzEyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTQ3
LDE4ICs0NywxOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkg
b3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQogCiAgICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFj
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGMxNzM5MGEx
YTc2MjE1ZTE2OTNhM2Q3ZmRiN2JhOTZjMTJkMzllN2IuLmI2MmFiNjg0Y2Q5MWVmYzc3ZjE4YTE2
NGU5NWE0NTk0ZmM3Njg1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0
SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQsNyArODQsNyBAQCBib29sIEZF
RHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAg
ICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJj
ZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFzb3VyY2VJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCAyNDMxZTc5MTU1NDY2OTUwMTc2
NDgxY2QzOWVjZDMwZDI4ZjFhYzZiLi4yODA5YjRiMTc1ZDMyNTVkMjEwNzQ5OTE2ZWIzZWQwNTAx
MzU2NWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9v
ZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogCiBib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oCmluZGV4IDEzMzgyMzFjZWRiMWQ5YTlhN2NmZDkxOGU0ZjM5ZGE2NzA2MWNj
NzEuLjljMTNlNWQ0ZWJhOGM4YzliYzk4NGRjNjM5NDcwYmM0OGM5NDM1ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC0z
OSw4ICszOSw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBu
b3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0
IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mg
b2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJp
ZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7
IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA1MGIyYzFl
MDJkOWQ4OGM5MWZjY2U4NDUyYmJjOTE5ODUxODk0ZDVlLi40YzVmYWIwMWEzMzk1N2U4ZmU5MjE1
NmQ1MDc5MTY3ZDRiZTljMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTIzLDE2ICs1
MjMsMTQgQEAgYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKLQogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgIGlmICghbV9zdGRYICYm
ICFtX3N0ZFkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC01NDMsNiArNTQxLDcgQEAgYm9v
bCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAgICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFn
ZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGU4M2NmM2I3Y2Q2MzY4
NmYxZjQ0MWU1MjI4ZjJjNTZiNGViNGExODIuLmE2OTY1NGFmMjBiYzM5ZTA1ODE0OTkyODNjMmZl
NDg3MmY4ZDMzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNDc1LDIyICs0NzUsMjMgQEAgYm9vbCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBzZXRJc0FscGhh
SW1hZ2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwor
CiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwx
KS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8g
dGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFz
IHN0cmFuZ2UKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFu
ZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252
b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRT
aXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOworCiAgICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQ
YWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMTFiYzg3OTU3ODdlYTQyMTdmMDgwNmY3YzU2M2UwZjU4
YWM1YTAyYy4uY2VhMTk3Y2Y4YTE3NjdjOWRkNGZkNGVlMDMzZjY2ZmZkMWY4MzljYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwCkBAIC00MywxNCArNDMsMTQgQEAgYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBp
ZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCisgICAg
ICAgIGlmIChhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCiAgICAgICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2
Li5iMjIzY2I5ZTU2NjM2OTU5YzNmOTFiODYxZTZkYTE3YzAzNmRhM2M3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC0yMjksNDcgKzIyOSw0NyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGlu
dCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzRGVnZW5lcmF0ZShpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpIGNvbnN0CiB7Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
IHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByYWRpdXNY
IDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwogfQogCiBib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQogICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZm
ZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6
bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAg
aW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJh
ZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisg
ICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNYLCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29w
eVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5n
UmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIH0KKworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CisgICAg
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKICAgICBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CiAgICAg
cGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCmluZGV4IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2
M2QuLmRiODcwYWU3ZGY1MDRlMTljNGQwNTEzZjhkNDIxYjAxZmNjYzFkMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgYm9vbCBpc0RlZ2VuZXJhdGUoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewog
ICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
aW5kZXggMDE0NTU3YTMxZDcwOTcyMzYyMmQ3NjYzMGFhYzcyODNiYjI2NWY3OC4uNDMxNGExYTU2
MTI0ZWQxYzgzNjA5Yzk4YzBiOWZjMWE1ZDIyYzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTY4LDggKzY4
LDggQEAgYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZl
ciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWlu
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCA0ZmUyNGE0ZjI2MmIx
NzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4Li5hOWUyMTMzN2IwZDI3NGU1NDgwZGY2NzYwZjg5
N2M3MjAxOWU1NDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00NCwxMSArNDQsMTAgQEAgRkVUaWxlOjpGRVRpbGUo
KQogCiBib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewotLy8gRklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsg
YXJvdW5kIGEgY29tcGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVy
d2lzZS4KICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggZGE0NzRm
NDEwNWYxNjRlNGRkZWU0OGI2Y2FiOWRiOGY4M2ExYTdmZS4uMjY1Nzc2NjNjYzYzMjc3YmUyZGFh
MzY0MDk2ODRiMWQ3MjIyNjlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5NSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogCiBib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA0MWJmYzM2NGEz
MzkwYjY4YjkyMThiMWJmMmZiOTk4MTkzYjdlNDYwLi5hYTEwYTdlZjAxODMwNjJmYjFlNmVlMjA2
N2UzNzhjOTZlZDhiZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywyOSArMjcsMTMgQEAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8
YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKLSAgICA6
IEZpbHRlckZ1bmN0aW9uKHR5cGUpCi17Ci19Ci0KIHZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWlu
dFJlY3QgPSBJbnRSZWN0KCk7CkBAIC0xNTcsNyArMTQxLDYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6
OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIH0KIAogICAgIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGlu
Z0NvbG9yU3BhY2UpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQogICAg
ICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgYXBwbHkoKToiCkBAIC0xNzEsNDY4ICsxNTQsNzYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVxdWlyZXNW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBs
aWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3RzKQor
ICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAg
ICB9CisgICAgCisgICAgaWYgKCFjcmVhdGVSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFu
ZCByZXR1cm4gZWFybGllci4KICAgICByZXR1cm4gcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRl
cik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cygpCitib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KCkKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdl
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdCwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZTsKIH0KIAog
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAg
IG1fZmlsdGVySW1hZ2UgPSBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCkKIHsKICAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVz
cyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKICAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVz
ZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVz
dWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9p
bnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1
cnNpdmUoKTsKKyAgICBjbGVhclJlc3VsdCgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9p
bnB1dEVmZmVjdHMpCisgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9
CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIC8vIEZJWE1FOiBSZXNwZWN0IHRoZSBGaWx0ZXI6OnJl
bmRlcmluZ01vZGUoKSB3aGVuIGNyZWF0aW5nIHRoZSBmaWx0ZXIgSW1hZ2VCdWZmZXIgcmVzdWx0
LgotICAgIC8vIEZvciBub3cganVzdCBwYXNzIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQu
IFRoaXMgd2lsbCBub3QgYmUgYSBiZWhhdmlvciBjaGFuZ2Ugc2luY2UKLSAgICAvLyB0aGlzIGlz
IHdoYXQgd2UgZG8gZm9yIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgY29kZSBwYXRoIGFueXdheS4KLSAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRD
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZl
cigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVh
ID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tl
ZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChj
aGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNw
YWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+
aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVy
RWZmZWN0OjpwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0KQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhl
bEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0
KTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBi
bGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2Nh
bGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgo
KSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAw
LCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJl
Y3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVj
dC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgp
ID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBh
aW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBz
Y2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkg
ewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9
Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9
IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0g
ICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4
WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5
RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAt
IHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qu
d2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5k
YXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAg
Y29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICog
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlP
cmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQ
aXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2Fu
bGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsr
eU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAg
IHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0
YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29u
c3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1
aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZh
bHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGlu
dCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAg
c291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0g
ICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBy
b3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5k
YXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAg
ICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRp
b24uZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAg
aW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsz
XSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRv
IHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNh
biBkbyBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50
KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENy
ZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6
QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNw
YWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhh
Rm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoYWxwaGFGb3Jt
YXQpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRh
cmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
cmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVy
Q29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwg
dGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRl
ZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBp
bWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFy
Z2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8g
Q29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZl
IHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQp
OwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
ZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVm
ZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBz
dG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRp
b24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRl
ckVmZmVjdDo6Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBo
YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUp
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0
UGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQsIHNvdXJjZVJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UGl4
ZWxCdWZmZXJSZXN1bHQoUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0g
ICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jl
c3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CiB9CiAKLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0
UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCkKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUo
KS5jaGFyYWN0ZXJzOCgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
LXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAg
IC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1
bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3Vs
dFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JT
cGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
ZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVy
biBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5h
dGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5h
dGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmICghaGFz
UmVzdWx0KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkK
IHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50
cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwot
I2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBt
X3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAg
IGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNw
YWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAg
IG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0CkBAIC02NDMsOCArMjM0LDggQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICBp
ZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7
CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9y
U3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9y
ZXN1bHRDb2xvclNwYWNlKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29s
b3JzcGFjZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVzdWx0IGNvbG9yc3BhY2UiLCByZXN1bHRDb2xvclNwYWNlKCkpOwogICAgICAgICB0cyA8
PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYzA3NTI2MzE0ZjdlNzc4MTI1ZTAwNTdiYjAzYjExY2Y5ZDAxN2I1Yi4uOTE2YmJlODM0NzFh
NDFhZTI1YjIyYWMyYjg2MThlMmFiNWRlYTYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNyAr
MjIsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0
aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ2LDI2ICs0MCwyMiBAQCBjbGFzcyBJbWFnZUJ1
ZmZlcjsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1
YmxpYzoKKyAgICBib29sIGNyZWF0ZVJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBv
dmVycmlkZTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCisgICAgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVmZmVyUmVzdWx0KFBpeGVsQnVm
ZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSBj
b25zdDsKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKwog
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVm
ZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLnNpemUoKTsgfQogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNp
ZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVy
RWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAg
fHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKQEAgLTEy
Myw4ICsxMTMsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0g
Y29sb3JTcGFjZTsgfQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkgeyBtX3Jlc3VsdENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CisKKyAgICB2
aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
ICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7CkBAIC0xMzgsMzYgKzEyOCwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KFR5cGUpOwotICAgIAotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICB1c2luZyBGaWx0
ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
ZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywg
d2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGlu
IFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBp
bWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vz
c2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmly
dHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgPSAwOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZm
ZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
Ym9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0g
ICAgCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRy
PEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBtX2ZpbHRlckltYWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0
OwogICAgIApAQCAtMTk1LDEyICsxNjcsNyBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCB0aGUg
ZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhl
IGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgogICAgIGJvb2wgbV9jbGlwc1RvQm91bmRz
IHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3Vs
dENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAogV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmY5Mzlj
ZWNmNDQ4Yjk4NGZkMzU5NWYyZGExMDNjOTQ5MThmYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAg
LTAsMCArMSwzMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmgi
CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmls
dGVySW1hZ2U6OmNyZWF0ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJz
b2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJ
bWFnZShhYnNvbHV0ZUltYWdlUmVjdCwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworfQor
CitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9hYnNvbHV0ZUltYWdlUmVjdChhYnNvbHV0ZUltYWdl
UmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9jb2xv
clNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1h
Z2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpLCBtX3JlbmRlcmluZ01vZGUsIDEsIG1fY29s
b3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29s
dXRlSW1hZ2VSZWN0LnNpemUoKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVyU2xvdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJTbG90KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5n
ZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
K3sKKyAgICBBU1NFUlQoc291cmNlUGl4ZWxCdWZmZXIuc2l6ZSgpID09IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIuc2l6ZSgpKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25TaXplID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci5zaXplKCk7CisgICAgdW5zaWduZWQgcm93Qnl0ZXMgPSBkZXN0aW5hdGlv
blNpemUud2lkdGgoKSAqIDQ7CisKKyAgICBDb25zdFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcg
c291cmNlIHsKKyAgICAgICAgc291cmNlUGl4ZWxCdWZmZXIuZm9ybWF0KCksCisgICAgICAgIHJv
d0J5dGVzLAorICAgICAgICBzb3VyY2VQaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpCisgICAgfTsK
KworICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRpb24geworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLmZvcm1hdCgpLAorICAgICAgICByb3dCeXRlcywKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpCisgICAgfTsKKworICAgIGNv
bnZlcnRJbWFnZVBpeGVscyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblNpemUpOwor
fQorCitzdGF0aWMgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNl
UGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXJSZWN0ID0g
SW50UmVjdCB7IHsgfSwgc291cmNlUGl4ZWxCdWZmZXIuc2l6ZSgpIH07CisgICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyUmVjdCA9IEludFJlY3QgeyB7IH0sIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIuc2l6ZSgpIH07CisgICAgCisgICAgYXV0byBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVy
c2VjdGlvbihzb3VyY2VQaXhlbEJ1ZmZlclJlY3QsIHNvdXJjZVJlY3QpOworICAgIGF1dG8gZGVz
dGluYXRpb25SZWN0ID0gSW50UmVjdCB7IHsgfSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07
CisgICAgCisgICAgaWYgKHNvdXJjZVJlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25S
ZWN0LnNldFgoLXNvdXJjZVJlY3QueCgpKTsKKyAgICAKKyAgICBpZiAoc291cmNlUmVjdC55KCkg
PCAwKQorICAgICAgICBkZXN0aW5hdGlvblJlY3Quc2V0WSgtc291cmNlUmVjdC55KCkpOworICAg
IAorICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoZGVzdGluYXRpb25QaXhlbEJ1ZmZlclJl
Y3QpOworICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUo
KSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBi
bGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoZGVz
dGluYXRpb25SZWN0LnNpemUoKSAhPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyUmVjdC5zaXplKCkp
CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuZGF0YSgpLnplcm9GaWxsKCk7CisKKyAg
ICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhl
IHNvdXJjZS4KKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ29uc3RQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IHNvdXJjZSB7CisgICAg
ICAgIHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oNCAqIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKS53aWR0aCgpKSwKKyAgICAgICAgc291
cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNv
dXJjZS5ieXRlc1BlclJvdyArIHNvdXJjZVJlY3RDbGlwcGVkLngoKSAqIDQKKyAgICB9OworCisg
ICAgUGl4ZWxCdWZmZXJDb252ZXJzaW9uVmlldyBkZXN0aW5hdGlvbiB7CisgICAgICAgIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIuZm9ybWF0KCksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pig0ICogZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKSksCisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIGRlc3RpbmF0aW9uUmVjdC55KCkg
KiBkZXN0aW5hdGlvbi5ieXRlc1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0CisgICAg
fTsKKworICAgIGNvbnZlcnRJbWFnZVBpeGVscyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYXV0byBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShzb3VyY2VSZWN0LnNpemUoKSk7CisgICAgYXV0
byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0
OjpCR1JBOCk7CisgICAgCisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFw
cGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5v
dGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBzb3VyY2VSZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0
dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNvdXJjZVJl
Y3QpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkK
K3sKKyAgICBhdXRvIHNvdXJjZVJlY3QgPSBJbnRSZWN0IHsgeyB9ICwgc291cmNlUGl4ZWxCdWZm
ZXIuc2l6ZSgpIH07CisgICAgYXV0byBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVk
U2l6ZShzb3VyY2VSZWN0LnNpemUoKSk7CisKKyAgICBhdXRvJiBzb3VyY2VDb2xvclNwYWNlID0g
c291cmNlUGl4ZWxCdWZmZXIuZm9ybWF0KCkuY29sb3JTcGFjZTsKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgMSwgc291cmNlQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHNvdXJjZVBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0
KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBo
YUZvcm1hdCwgc291cmNlUmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBv
ZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4
dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4g
dGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBw
aXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3Bh
Y2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBu
b3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZv
cm1hdCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0
byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclNsb3QoYWxwaGFGb3JtYXQpOworICAgIGlmIChw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworCisgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVm
ZmVyU2xvdCgpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBJbnRTaXplIGxv
Z2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworCisgICAgcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNhbFNpemUpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAg
ICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcygqc291cmNlUGl4ZWxCdWZmZXIsICpwaXhlbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5SW1h
Z2VCeXRlcygqc291cmNlUGl4ZWxCdWZmZXIsICpwaXhlbEJ1ZmZlcik7CisgICAgfQorCisgICAg
cmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBh
bHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc291cmNlUmVjdC5zaXplKCkpKTsKKworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2U/ICpjb2xvclNwYWNlIDogbV9jb2xvclNwYWNlIH07CisKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNvdXJjZVJlY3Quc2l6ZSgpKTsK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgcmV0dXJu
IHBpeGVsQnVmZmVyOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoUGl4
ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QpCit7CisgICAgYXV0byBhbHBoYUZvcm1hdCA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuZm9y
bWF0KCkuYWxwaGFGb3JtYXQ7CisgICAgYXV0byYgY29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIuZm9ybWF0KCkuY29sb3JTcGFjZTsKKworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlclNsb3QoYWxw
aGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZl
cikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZy
b20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
aW1hZ2VCdWZmZXJTbG90KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyB7IH0s
IG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZFBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzb3VyY2VQaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVm
ZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnNvdXJjZVBpeGVsQnVmZmVyLCBhbHBo
YUZvcm1hdCwgY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVy
dGVkUGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMoKnNvdXJjZVBpeGVsQnVm
ZmVyLCBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0KTsKK30KKwordm9pZCBGaWx0
ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVz
dCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90
IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkg
PSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVs
RGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1h
Z2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBw
aXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGgg
JSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJy
YXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRh
ICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90
IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBz
aXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3
aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3Ro
ICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVu
Z3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBo
YSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUg
KC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGlu
IGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAg
Ly8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVs
IGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7
CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1l
bnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0
ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFk
anVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vs
c2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2Fy
eSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRy
YW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdl
QnVmZmVyLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9y
U3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBz
dGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxv
cHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE2YTk4ZTI3N2VhOTkwOGI4YjZhZmRhZTBjNTcyNDg2ZjAyNTZiN2MKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQ
aXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0
ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0
ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdDsgfQorCisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Cisg
ICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKTsKKyAg
ICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVm
ZmVyKFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KTsKKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFn
ZVJlY3QsIFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJTbG90KCkgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlcjsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlclNs
b3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4pIGNvbnN0OworCisgICAgSW50UmVjdCBtX2Fic29sdXRlSW1hZ2VSZWN0OworCisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
Y29sb3JTcGFjZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCBj
ZmI1NzQ0YTdkYTY2ODY3OWExYmQ4NTE4YWU1YjJkZjNkODJjYTNlLi44ZmE0NDJiOGQ5ZDUzYTk5
ZWY1Y2ExNTg4MjY2MzUwZGE2YmE1ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDcsNyArNDcs
NyBAQCB2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKIAogYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGZhMjEwYzcyMDc0MWU0MzUyNzZl
ZDVlZjIxMWQ3NzI2MzdjOTc3NmMuLmVjZGU0MzFmOWI5YjA2NDQxM2VhMDViNjBkZGNiOTJlNTg5
OGM3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMzQsNyArMzQsNiBAQCBSZWY8U291cmNl
R3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkKIFNvdXJjZUdyYXBoaWM6OlNvdXJjZUdy
YXBoaWMoKQogICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3Jh
cGhpYykKIHsKLSAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKQEAgLTQ1LDcgKzQ0LDcgQEAgdm9pZCBTb3Vy
Y2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKIAogYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3Vy
Y2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDRhMDUwYjE2OTU5OTkxMmQwNzNl
ZmRkN2EzNzAzNTUyOGUzMjUxMmMuLmYwYTI2NWJmNjcwYTk4M2NkNjIxNTA2NWQxNjc4YmEyMjQy
OTI1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIEdyYXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAg
ICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAg
ICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0
LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxhc3RF
ZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwogICAgICAgICB9CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRh
OjpCdWlsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAKaW5kZXggNTU0MDBiN2ViYTNlNGY2YzJiZWQ5ODRiY2NiNTFkMjM3ZTM0NDQ3
YS4uM2ZlY2YxZjM0NGUxYzdmNmE2YTJhNjA5MTE5NTIxODRiNjE2ZDYzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTc2
LDEwICs3Niw3IEBAIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAKIGJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3
YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IDM0ZjcxYmE4NDZlYzBmZjJkZDY4MjcwMTZkOWEwNTg5
NGNiNGU4ZDkuLmRhN2U0N2JkMThmNTQ0YTJlNTIzNzcxZDIzOTI3ZDcyMmE5OWFiNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAg
LTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUltYWdlKFNvdXJjZUltYWdl
JiYsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKIAorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGlu
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQorCiAgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBmaW5hbDsKIAog
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444893</attachid>
            <date>2021-11-20 03:42:25 -0800</date>
            <delta_ts>2021-11-20 11:29:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211120034224.patch</filename>
            <type>text/plain</type>
            <size>93289</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uNDc1NzQyNDk1Y2M2YTRlODg5Y2RkM2FjMzg2Yzgw
MmNjZDRjNzE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9u
IG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAg
IHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNh
bGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3Jl
YXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUg
b25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBj
YWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVl
c3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0
ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgIFRoZSBk
ZWZhdWx0IG9mIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZSBpcyBzUkdCLiBCdXQgaXQgd2lsbCBi
ZSBzZXQgdG8KKyAgICAgICAgbGluZWFyUkdCIGlmIHRoZSBjb2xvciBpbnRlcnBvbGF0aW9uIG9m
IHRoZSBmaWx0ZXIgZWZmZWN0IGVsZW1lbnQgaXMKKyAgICAgICAgbGluZWFyUkdCLiBUaGUgb25s
eSBleGNlcHRpb24gaXMgdGhlIEZFSW1hZ2Ugd2hvc2UgcmVzdWx0IGhhcyB0byBiZSBpbgorICAg
ICAgICBzUkdCIGFsd2F5cy4KKworICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcmVz
dWx0IENvbG9yU3BhY2UgaXMgdGhlIG9wZXJhdGluZyBDb2xvclNwYWNlLgorICAgICAgICBUaGUg
b25seSBleGNlcHRpb24gaXMgRkVEaXNwbGFjZW1lbnRNYXAgd2hvc2UgcmVzdWx0IGhhcyB0byBi
ZSBpbiB0aGUKKyAgICAgICAgQ29sb3JTcGFjZSBvZiBpdHMgZmlyc3QgaW5wdXQgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0aGUg
b3Bwb3NpdGUKKyAgICAgICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCku
IENvcnJlY3RpbmcgdGhlIHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9u
ZSBieSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp5Q2hhbm5lbEluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVSZXN1bHQpOgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBi
eSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3ZlZCB0byBGaWx0ZXJJ
bWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFsaWRQcmVt
dWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weVBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlw
bGllZFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjp0cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6YWJzb2x1
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvbG9yU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlQnVmZmVySWZF
eGlzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Ny
b2xsIGFuaW1hdGlvbiB3aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA5ZDc3NTQ4Y2RlYTBiNDdiMjIwNmJiNThkZTZkM2RhMDg0ZTVjNzQ4Li4yOGQ1
ZGQzYjM1ZWZjNjdlODNlMzRlMmE2MTk1MzUxMmMyMGI3ZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MjEwMCw2ICsyMTAwLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlhYmUx
ODk4NjBkOGRjNTlhOGMwMzQ4ZDU1OWE3N2Q1NDliMGM3NjUuLjU2ZDM3MjkxMjcwYmUzNDY0ZDFi
YTM5MDY4YjRkZTM5Mjk1NWViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODU2LDYgKzEwODU2LDggQEAKIAkJNzIxQjQ5
NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWlu
TWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5N
YXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU5MjksNiArMjU5MzEsOCBA
QAogCQkJCTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAq
LywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICov
LAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAor
CQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJ
NzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VC
NjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VC
NjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA4YjQwMDE3NzAw
ZTEwYzY4N2JhNzA2ZTU1OTZiOGMwYjIzMGJhMjRlLi40OTYxNWZkZTgzZWVkNDMwZmUxZTVjMTU3
OGMwNjliMjM2NjM3MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgUmV0YWluUHRyPENJSW1hZ2U+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRl
ciYKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KICAgICBl
ZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBlZmZlY3Quc2V0
UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAg
ICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXgg
YjM2YjY0N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOC4uYjUyYjhhY2QzODNlYzgz
OTRkOWM3OGE5ZTE4M2Q0NTgyOWViZGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
QEAgLTExMSwxNyArMTExLDE3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8g
c291cmNlUGl4ZWxBcnJheUEgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIElu
dFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5
QiA9IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheUIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKICAg
ICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxl
bmd0aCgpOwogICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlC
LT5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCAxYTEzNzU4ODFlMmEyOTY0MDgwMGNmMjNmY2UwYWRi
MDIxNzE4MDA2Li5jOTFhYTNkNjhkNWRmZjUzMzkxZmUwZDdkOThiNzlhNmI2ZDUyODZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5jcHAKQEAgLTU5LDE2ICs1OSwxNiBAQCBib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVy
MikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAppbmRleCA2NzllNzhkYWVhODczZjVkMzNhMWFmZjg3MTUyNWJmY2Y4Nzcx
MGZiLi41YTkxYzRlY2M0NGZjNzdhYmZmZDQ5ZDdkMTY5N2RjMTRmOTJiNjc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKQEAgLTI3NywxMSArMjc3LDExIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKGlu
QnVmZmVyKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQx
MzQzZTcxOGY0MjAxNWRiNDEyNGM3ZTBhZWZlYS4uZGY4MGUwM2VkZDczMDBlZWU3YjA2YjNhZTQ3
ODNkNzJiNjdiYzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xMDUs
MTIgKzEwNSwxMCBAQCBib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBp
eGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJs
ZSBncmVlblRhYmxlOwogICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKQEAgLTExOCw5ICsxMTYs
MTIgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxl
LCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBk
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7Cisg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJh
d2luZ1JlY3QpOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSBy
ZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAx
XSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggMjVhYzAwODQyNGJkODYzMTE4NDc4OTA5NTBiY2Y2M2U1YWVmNWZhOC4uOWQ5MmUwMThhZGQw
M2ZmYzBiM2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0
ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsK
LX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1
bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1
NSwgMCB9OwpAQCAtMjI5LDM0ICsyMjEsMzUgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAg
YXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCk7CisgICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9
IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlcjIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKICAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCBj
ZmQyNGNhZmViMDU4NjM3MDdiOTRkODlhMDk2N2Y4MTdmYmM4ZDZkLi5hODc2YTk1ZDNmNzE5MmQw
NjJmZjg0YTNhMDZlMGU2ZjMzNzQ2OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01OSwxMiArNTksMTAg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0g
ICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBt
X3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiAgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAorICAg
IGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0K
KwogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAppbmRleCA5M2Y2ZGY4N2E4Y2JkM2MxNjQyNDNmMjQzNjA0ZGNlZWViODFh
NjY0Li41NGY4MDRhOGZlZDI1MTRlMjIxMDVlYTUyM2JjYmQ0ODU3Nzc3YjhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2NSwyNiArMzY1LDIzIEBAIGJvb2wgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGFscGhhRm9y
bWF0ID0gbV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZDsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKLSAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJj
ZVBpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1
ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKICAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewot
ICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKICAg
ICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwK
ICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApp
bmRleCAyZGZkODU3NmY3ZjFlMDJmMWQwMzQ5MTk1ZGQwYzI1ZjQ2NDQzNmRjLi5lN2MxYTIyOTli
NGU1MDdjNGY2OGI4Njg4YThkMDg1NzdjMDU1NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcApAQCAtNjgsMTMgKzY4LDEzIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxl
KGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xv
clNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UK
ICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUg
J2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xv
ciBzcGFjZS4KLSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRl
ckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JT
cGFjZSgpKTsKKyAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgorICAgIHJldHVy
biBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNv
bnN0IGludCBpbmRleCkKQEAgLTk4LDIzICs5OCwyNSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQVNTRVJU
KG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVs
dGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1
ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhl
bCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlw
bGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5t
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgYXV0byBkaXNwbGFjZW1l
bnRQaXhlbEJ1ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCisgICAgaWYgKCFpbnB1dFBp
eGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudElt
YWdlLT5sZW5ndGgoKSk7CisgICAgYXV0byYgaW5wdXRJbWFnZSA9IGlucHV0UGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBhdXRvJiBkaXNwbGFjZW1lbnRJbWFnZSA9IGRpc3BsYWNlbWVudFBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgQVNTRVJUKGlucHV0SW1hZ2UubGVuZ3RoKCkgPT0gZGlzcGxh
Y2VtZW50SW1hZ2UubGVuZ3RoKCkpOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKIApAQCAtMTM1LDggKzEzNyw4IEBAIGJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7CiAgICAg
ICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0Owog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkg
KyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9u
SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAg
ICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNw
bGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVs
WSkgKyBzY2FsZWRPZmZzZXRZKTsKIAogICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFy
cmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpIHsKQEAgLTE0NCw3ICsxNDYsNyBAQCBib29sIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5h
dGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0
ZXMpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNj
ZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUxMzc2NjQzNjA2YjkyNWUuLjk5MDE0MjYxY2I4MmU5ZGEy
MGI5ZTAzZjhkZWRjMjI1NjgzYzEyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTQ3
LDE4ICs0NywxOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkg
b3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQogCiAgICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFj
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGMxNzM5MGEx
YTc2MjE1ZTE2OTNhM2Q3ZmRiN2JhOTZjMTJkMzllN2IuLmI2MmFiNjg0Y2Q5MWVmYzc3ZjE4YTE2
NGU5NWE0NTk0ZmM3Njg1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0
SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQsNyArODQsNyBAQCBib29sIEZF
RHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAg
ICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJj
ZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFzb3VyY2VJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCAyNDMxZTc5MTU1NDY2OTUwMTc2
NDgxY2QzOWVjZDMwZDI4ZjFhYzZiLi4yODA5YjRiMTc1ZDMyNTVkMjEwNzQ5OTE2ZWIzZWQwNTAx
MzU2NWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9v
ZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogCiBib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oCmluZGV4IDEzMzgyMzFjZWRiMWQ5YTlhN2NmZDkxOGU0ZjM5ZGE2NzA2MWNj
NzEuLjljMTNlNWQ0ZWJhOGM4YzliYzk4NGRjNjM5NDcwYmM0OGM5NDM1ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC0z
OSw4ICszOSw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBu
b3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0
IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mg
b2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJp
ZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7
IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA1MGIyYzFl
MDJkOWQ4OGM5MWZjY2U4NDUyYmJjOTE5ODUxODk0ZDVlLi40YzVmYWIwMWEzMzk1N2U4ZmU5MjE1
NmQ1MDc5MTY3ZDRiZTljMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTIzLDE2ICs1
MjMsMTQgQEAgYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKLQogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgIGlmICghbV9zdGRYICYm
ICFtX3N0ZFkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC01NDMsNiArNTQxLDcgQEAgYm9v
bCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAgICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFn
ZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGU4M2NmM2I3Y2Q2MzY4
NmYxZjQ0MWU1MjI4ZjJjNTZiNGViNGExODIuLmE2OTY1NGFmMjBiYzM5ZTA1ODE0OTkyODNjMmZl
NDg3MmY4ZDMzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNDc1LDIyICs0NzUsMjMgQEAgYm9vbCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBzZXRJc0FscGhh
SW1hZ2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwor
CiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwx
KS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8g
dGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFz
IHN0cmFuZ2UKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFu
ZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252
b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRT
aXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOworCiAgICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQ
YWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMTFiYzg3OTU3ODdlYTQyMTdmMDgwNmY3YzU2M2UwZjU4
YWM1YTAyYy4uY2VhMTk3Y2Y4YTE3NjdjOWRkNGZkNGVlMDMzZjY2ZmZkMWY4MzljYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwCkBAIC00MywxNCArNDMsMTQgQEAgYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBp
ZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCisgICAg
ICAgIGlmIChhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCiAgICAgICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2
Li5iMjIzY2I5ZTU2NjM2OTU5YzNmOTFiODYxZTZkYTE3YzAzNmRhM2M3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC0yMjksNDcgKzIyOSw0NyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGlu
dCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzRGVnZW5lcmF0ZShpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpIGNvbnN0CiB7Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
IHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByYWRpdXNY
IDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwogfQogCiBib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQogICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZm
ZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6
bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAg
aW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJh
ZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisg
ICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNYLCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29w
eVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5n
UmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIH0KKworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CisgICAg
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKICAgICBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CiAgICAg
cGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCmluZGV4IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2
M2QuLmRiODcwYWU3ZGY1MDRlMTljNGQwNTEzZjhkNDIxYjAxZmNjYzFkMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgYm9vbCBpc0RlZ2VuZXJhdGUoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewog
ICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
aW5kZXggMDE0NTU3YTMxZDcwOTcyMzYyMmQ3NjYzMGFhYzcyODNiYjI2NWY3OC4uNDMxNGExYTU2
MTI0ZWQxYzgzNjA5Yzk4YzBiOWZjMWE1ZDIyYzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTY4LDggKzY4
LDggQEAgYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZl
ciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWlu
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCA0ZmUyNGE0ZjI2MmIx
NzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4Li5hOWUyMTMzN2IwZDI3NGU1NDgwZGY2NzYwZjg5
N2M3MjAxOWU1NDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00NCwxMSArNDQsMTAgQEAgRkVUaWxlOjpGRVRpbGUo
KQogCiBib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewotLy8gRklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsg
YXJvdW5kIGEgY29tcGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVy
d2lzZS4KICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggZGE0NzRm
NDEwNWYxNjRlNGRkZWU0OGI2Y2FiOWRiOGY4M2ExYTdmZS4uMjY1Nzc2NjNjYzYzMjc3YmUyZGFh
MzY0MDk2ODRiMWQ3MjIyNjlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5NSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogCiBib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA0MWJmYzM2NGEz
MzkwYjY4YjkyMThiMWJmMmZiOTk4MTkzYjdlNDYwLi5hYTEwYTdlZjAxODMwNjJmYjFlNmVlMjA2
N2UzNzhjOTZlZDhiZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywyOSArMjcsMTMgQEAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8
YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKLSAgICA6
IEZpbHRlckZ1bmN0aW9uKHR5cGUpCi17Ci19Ci0KIHZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWlu
dFJlY3QgPSBJbnRSZWN0KCk7CkBAIC0xNTcsNyArMTQxLDYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6
OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIH0KIAogICAgIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGlu
Z0NvbG9yU3BhY2UpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQogICAg
ICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgYXBwbHkoKToiCkBAIC0xNzEsNDY4ICsxNTQsNzYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVxdWlyZXNW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBs
aWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3RzKQor
ICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAg
ICB9CisgICAgCisgICAgaWYgKCFjcmVhdGVSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFu
ZCByZXR1cm4gZWFybGllci4KICAgICByZXR1cm4gcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRl
cik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cygpCitib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KCkKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdl
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdCwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZTsKIH0KIAog
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAg
IG1fZmlsdGVySW1hZ2UgPSBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCkKIHsKICAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVz
cyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKICAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVz
ZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVz
dWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9p
bnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1
cnNpdmUoKTsKKyAgICBjbGVhclJlc3VsdCgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9p
bnB1dEVmZmVjdHMpCisgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9
CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIC8vIEZJWE1FOiBSZXNwZWN0IHRoZSBGaWx0ZXI6OnJl
bmRlcmluZ01vZGUoKSB3aGVuIGNyZWF0aW5nIHRoZSBmaWx0ZXIgSW1hZ2VCdWZmZXIgcmVzdWx0
LgotICAgIC8vIEZvciBub3cganVzdCBwYXNzIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQu
IFRoaXMgd2lsbCBub3QgYmUgYSBiZWhhdmlvciBjaGFuZ2Ugc2luY2UKLSAgICAvLyB0aGlzIGlz
IHdoYXQgd2UgZG8gZm9yIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgY29kZSBwYXRoIGFueXdheS4KLSAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRD
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZl
cigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVh
ID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tl
ZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChj
aGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNw
YWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+
aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVy
RWZmZWN0OjpwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0KQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhl
bEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0
KTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBi
bGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2Nh
bGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgo
KSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAw
LCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJl
Y3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVj
dC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgp
ID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBh
aW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBz
Y2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkg
ewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9
Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9
IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0g
ICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4
WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5
RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAt
IHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qu
d2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5k
YXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAg
Y29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICog
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlP
cmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQ
aXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2Fu
bGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsr
eU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAg
IHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0
YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29u
c3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1
aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZh
bHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGlu
dCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAg
c291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0g
ICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBy
b3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5k
YXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAg
ICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRp
b24uZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAg
aW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsz
XSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRv
IHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNh
biBkbyBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50
KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENy
ZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6
QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNw
YWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhh
Rm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoYWxwaGFGb3Jt
YXQpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRh
cmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
cmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVy
Q29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwg
dGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRl
ZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBp
bWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFy
Z2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8g
Q29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZl
IHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQp
OwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
ZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVm
ZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBz
dG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRp
b24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRl
ckVmZmVjdDo6Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBo
YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUp
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0
UGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQsIHNvdXJjZVJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UGl4
ZWxCdWZmZXJSZXN1bHQoUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0g
ICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jl
c3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CiB9CiAKLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0
UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCkKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUo
KS5jaGFyYWN0ZXJzOCgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
LXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAg
IC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1
bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3Vs
dFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JT
cGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
ZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVy
biBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5h
dGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5h
dGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmICghaGFz
UmVzdWx0KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkK
IHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50
cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwot
I2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBt
X3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAg
IGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNw
YWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAg
IG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0CkBAIC02NDMsOCArMjM0LDggQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICBp
ZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7
CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9y
U3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9y
ZXN1bHRDb2xvclNwYWNlKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29s
b3JzcGFjZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVzdWx0IGNvbG9yc3BhY2UiLCByZXN1bHRDb2xvclNwYWNlKCkpOwogICAgICAgICB0cyA8
PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYzA3NTI2MzE0ZjdlNzc4MTI1ZTAwNTdiYjAzYjExY2Y5ZDAxN2I1Yi4uOTE2YmJlODM0NzFh
NDFhZTI1YjIyYWMyYjg2MThlMmFiNWRlYTYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNyAr
MjIsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0
aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ2LDI2ICs0MCwyMiBAQCBjbGFzcyBJbWFnZUJ1
ZmZlcjsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1
YmxpYzoKKyAgICBib29sIGNyZWF0ZVJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBv
dmVycmlkZTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCisgICAgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVmZmVyUmVzdWx0KFBpeGVsQnVm
ZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSBj
b25zdDsKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKwog
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVm
ZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLnNpemUoKTsgfQogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNp
ZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVy
RWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAg
fHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKQEAgLTEy
Myw4ICsxMTMsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0g
Y29sb3JTcGFjZTsgfQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkgeyBtX3Jlc3VsdENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CisKKyAgICB2
aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
ICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7CkBAIC0xMzgsMzYgKzEyOCwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KFR5cGUpOwotICAgIAotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICB1c2luZyBGaWx0
ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
ZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywg
d2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGlu
IFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBp
bWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vz
c2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmly
dHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgPSAwOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZm
ZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
Ym9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0g
ICAgCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRy
PEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBtX2ZpbHRlckltYWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0
OwogICAgIApAQCAtMTk1LDEyICsxNjcsNyBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCB0aGUg
ZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhl
IGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgogICAgIGJvb2wgbV9jbGlwc1RvQm91bmRz
IHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3Vs
dENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAogV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGYzOTlj
NDQ3ZGQ2NDhhMjdmYWQ3YzQ1NDY0NzBiNWM0MDQ2ZGEwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAg
LTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmgi
CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmls
dGVySW1hZ2U6OmNyZWF0ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJz
b2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJ
bWFnZShhYnNvbHV0ZUltYWdlUmVjdCwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworfQor
CitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9hYnNvbHV0ZUltYWdlUmVjdChhYnNvbHV0ZUltYWdl
UmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9jb2xv
clNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1h
Z2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpLCBtX3JlbmRlcmluZ01vZGUsIDEsIG1fY29s
b3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29s
dXRlSW1hZ2VSZWN0LnNpemUoKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVyU2xvdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJTbG90KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5n
ZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
K3sKKyAgICBBU1NFUlQoc291cmNlUGl4ZWxCdWZmZXIuc2l6ZSgpID09IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIuc2l6ZSgpKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25TaXplID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci5zaXplKCk7CisgICAgdW5zaWduZWQgcm93Qnl0ZXMgPSBkZXN0aW5hdGlv
blNpemUud2lkdGgoKSAqIDQ7CisKKyAgICBDb25zdFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcg
c291cmNlIHsKKyAgICAgICAgc291cmNlUGl4ZWxCdWZmZXIuZm9ybWF0KCksCisgICAgICAgIHJv
d0J5dGVzLAorICAgICAgICBzb3VyY2VQaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpCisgICAgfTsK
KworICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRpb24geworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLmZvcm1hdCgpLAorICAgICAgICByb3dCeXRlcywKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpCisgICAgfTsKKworICAgIGNv
bnZlcnRJbWFnZVBpeGVscyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblNpemUpOwor
fQorCitzdGF0aWMgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNl
UGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAgIGF1dG8mIHNvdXJjZSA9IHNvdXJjZVBpeGVsQnVm
ZmVyLmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIuZGF0YSgpOworICAgIEludFNpemUgbG9naWNhbFNpemUoc291cmNlUGl4ZWxCdWZmZXIuc2l6
ZSgpKTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3Bh
cmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBp
ZiAoc291cmNlUmVjdC54KCkgPCAwIHx8IHNvdXJjZVJlY3QueSgpIDwgMCB8fCBzb3VyY2VSZWN0
Lm1heFgoKSA+IGxvZ2ljYWxTaXplLndpZHRoKCkgfHwgc291cmNlUmVjdC5tYXhZKCkgPiBsb2dp
Y2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwg
ZGVzdGluYXRpb24ubGVuZ3RoKCkpOworICAgIAorICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUg
cmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzb3VyY2VS
ZWN0Lm1heFgoKSA8PSAwIHx8IHNvdXJjZVJlY3QubWF4WSgpIDw9IDAgfHwgc291cmNlUmVjdC54
KCkgPj0gbG9naWNhbFNpemUud2lkdGgoKSB8fCBzb3VyY2VSZWN0LnkoKSA+PSBsb2dpY2FsU2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCB4T3JpZ2luID0gc291
cmNlUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsK
KyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQor
ICAgIGludCB4RW5kID0gc291cmNlUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBsb2dpY2Fs
U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gbG9naWNhbFNpemUud2lkdGgoKTsKKyAgICAK
KyAgICBpbnQgeU9yaWdpbiA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7Cisg
ICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAg
IHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNvdXJjZVJlY3QubWF4WSgpOwor
ICAgIGlmICh5RW5kID4gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlFbmQgPSBsb2dp
Y2FsU2l6ZS5oZWlnaHQoKTsKKyAgICAKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikg
KiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBsb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAg
ICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVz
dCAqIHNvdXJjZVJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIGxvZ2ljYWxTaXplLndp
ZHRoKCkpICsgeE9yaWdpbikgKiA0OworICAgIAorICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkg
eworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAg
IHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47CisgICAg
fQorfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKHNvdXJjZVJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvIGNvbnZlcnRlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAK
KyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkg
d2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVy
dGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHNv
dXJjZVJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1h
Z2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc291cmNlUmVjdCk7Cit9CisKK3N0YXRp
YyBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhl
bEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFG
b3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGF1dG8gc291
cmNlUmVjdCA9IEludFJlY3QgeyB7IH0gLCBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkgfTsKKyAg
ICBhdXRvIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHNvdXJjZVJlY3Qu
c2l6ZSgpKTsKKworICAgIGF1dG8mIHNvdXJjZUNvbG9yU3BhY2UgPSBzb3VyY2VQaXhlbEJ1ZmZl
ci5mb3JtYXQoKS5jb2xvclNwYWNlOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBz
b3VyY2VDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoc291cmNlUGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworICAgIHJldHVybiBn
ZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCBzb3VyY2VS
ZWN0LCBjb2xvclNwYWNlKTsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVy
biBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVs
QnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJl
dHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9
IHBpeGVsQnVmZmVyU2xvdChhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2Ug
fTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJTbG90KCkpIHsKKyAg
ICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7
IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhl
bEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUobV9hYnNv
bHV0ZUltYWdlUmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVy
Ojp0cnlDcmVhdGUoZm9ybWF0LCBsb2dpY2FsU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChhdXRvJiBz
b3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpzb3VyY2VQaXhl
bEJ1ZmZlciwgKnBpeGVsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYg
c291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpzb3VyY2VQ
aXhlbEJ1ZmZlciwgKnBpeGVsQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gJnBpeGVsQnVm
ZmVyLnZhbHVlKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdl
OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzb3VyY2VSZWN0LnNpemUoKSkpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZT8gKmNvbG9yU3Bh
Y2UgOiBtX2NvbG9yU3BhY2UgfTsKKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZl
cjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc291cmNlUmVjdC5zaXplKCkpOworICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0KTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9
CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBhdXRv
IGFscGhhRm9ybWF0ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1h
dDsKKyAgICBhdXRvJiBjb2xvclNwYWNlID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5mb3JtYXQo
KS5jb2xvclNwYWNlOworCisgICAgYXV0byogc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZl
clNsb3QoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVyU2xvdChhbHBoYUZvcm1hdCkudmFsdWUo
KSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
KyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVm
ZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlclNsb3Qo
KSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdl
UmVjdC5zaXplKCkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1
ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQs
IHJlY3QsIGNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcygq
Y29udmVydGVkUGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3Qp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHNvdXJjZVBpeGVsQnVmZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQp
OworICAgIH0KKworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlcigqc291cmNlUGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCBjb2xvclNw
YWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRQaXhlbEJ1ZmZlciwg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcygqc291cmNlUGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0
UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJl
LW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBp
eGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGll
ZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJh
eS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgp
OworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxl
dGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKworI2lmIEhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkg
eworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxl
bmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBw
aXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9
IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9
IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Cisg
ICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMu
dmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxz
LnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZh
bFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwor
ICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEg
PCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKKyAgICAg
ICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OworCisgICAg
Ly8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3Rpbmcg
Y29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0g
MCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAorICAgICAg
ICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBlYWNoIGNv
bXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgqcGl4ZWxE
YXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAgICAgICsr
cGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKKyAg
ICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdlOjp0cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYg
VVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJu
YWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xv
clNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNv
bnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQg
Zm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVm
ZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3Bh
Y2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhOThlMjc3
ZWE5OTA4YjhiNmFmZGFlMGM1NzI0ODZmMDI1NmI3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitj
bGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEludFJlY3Qm
IGFic29sdXRlSW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKTsKKworICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlSW1hZ2VSZWN0OyB9CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7
IH0KKworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworICAgIFBpeGVsQnVmZmVyKiBw
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXIm
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOworCisg
ICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFu
c2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAg
ICBGaWx0ZXJJbWFnZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+JiBpbWFnZUJ1ZmZlclNsb3QoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CisgICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRp
cGxpY2F0aW9uKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisKKyAg
ICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7CisKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVu
ZGVyaW5nTW9kZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IGNmYjU3NDRhN2RhNjY4Njc5
YTFiZDg1MThhZTViMmRmM2Q4MmNhM2UuLjhmYTQ0MmI4ZDlkNTNhOTllZjVjYTE1ODgyNjYzNTBk
YTZiYTU4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
CiBib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
IHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKaW5kZXggZmEyMTBjNzIwNzQxZTQzNTI3NmVkNWVmMjExZDc3MjYzN2M5
Nzc2Yy4uZWNkZTQzMWY5YjliMDY0NDEzZWEwNWI2MGRkY2I5MmU1ODk4YzcwNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCkBAIC0zNCw3ICszNCw2IEBAIFJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VH
cmFwaGljOjpjcmVhdGUoKQogU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCiAgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQog
CiB2b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQpAQCAtNDUsNyArNDQsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiBib29sIFNvdXJj
ZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKaW5kZXggNGEwNTBiMTY5NTk5OTEyZDA3M2VmZGQ3YTM3MDM1NTI4ZTMy
NTEyYy4uZjBhMjY1YmY2NzBhOTgzY2Q2MjE1MDY1ZDE2NzhiYTIyNDI5MjUyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAg
ICAgICBpZiAoIWxhc3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJE
YXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QXBwbHlpbmc7CiAgICAgICAgICAgICBmaWx0ZXJEYXRh
LmZpbHRlci0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJS
ZXN1bHRJZk5lZWRlZCgpOworICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdFByZW11bHRp
cGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAg
IH0KICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRl
eCA1NTQwMGI3ZWJhM2U0ZjZjMmJlZDk4NGJjY2I1MWQyMzdlMzQ0NDdhLi4zZmVjZjFmMzQ0ZTFj
N2Y2YTZhMmE2MDkxMTk1MjE4NGI2MTZkNjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtNzYsMTAgKzc2LDcgQEAgdm9p
ZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKIAogYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7Ci0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmgKaW5kZXggMzRmNzFiYTg0NmVjMGZmMmRkNjgyNzAxNmQ5YTA1ODk0Y2I0ZThkOS4uZGE3ZTQ3
YmQxOGY1NDRhMmU1MjM3NzFkMjM5MjdkNzIyYTk5YWI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDQsNiArNDQsOSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYp
OwogCisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CisKICAgICB2b2lkIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogCiAgICAgYm9vbCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444902</attachid>
            <date>2021-11-20 11:29:36 -0800</date>
            <delta_ts>2021-11-22 20:21:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211120112935.patch</filename>
            <type>text/plain</type>
            <size>93191</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uNDc1NzQyNDk1Y2M2YTRlODg5Y2RkM2FjMzg2Yzgw
MmNjZDRjNzE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0xOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFnZSBh
bmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAg
ICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9u
IG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAg
IHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNh
bGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3Jl
YXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUg
b25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBj
YWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVl
c3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0
ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgIFRoZSBk
ZWZhdWx0IG9mIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZSBpcyBzUkdCLiBCdXQgaXQgd2lsbCBi
ZSBzZXQgdG8KKyAgICAgICAgbGluZWFyUkdCIGlmIHRoZSBjb2xvciBpbnRlcnBvbGF0aW9uIG9m
IHRoZSBmaWx0ZXIgZWZmZWN0IGVsZW1lbnQgaXMKKyAgICAgICAgbGluZWFyUkdCLiBUaGUgb25s
eSBleGNlcHRpb24gaXMgdGhlIEZFSW1hZ2Ugd2hvc2UgcmVzdWx0IGhhcyB0byBiZSBpbgorICAg
ICAgICBzUkdCIGFsd2F5cy4KKworICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcmVz
dWx0IENvbG9yU3BhY2UgaXMgdGhlIG9wZXJhdGluZyBDb2xvclNwYWNlLgorICAgICAgICBUaGUg
b25seSBleGNlcHRpb24gaXMgRkVEaXNwbGFjZW1lbnRNYXAgd2hvc2UgcmVzdWx0IGhhcyB0byBi
ZSBpbiB0aGUKKyAgICAgICAgQ29sb3JTcGFjZSBvZiBpdHMgZmlyc3QgaW5wdXQgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBpcyByZXBsYWNlZCBieSB0aGUg
b3Bwb3NpdGUKKyAgICAgICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCku
IENvcnJlY3RpbmcgdGhlIHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9u
ZSBieSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp5Q2hhbm5lbEluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjcmVhdGVSZXN1bHQpOgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKToKKyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBi
eSBudWxsaWZ5aW5nIGEgc2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojp1bnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Z2V0VW5wcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Z2V0UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlVbnByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcyBtb3ZlZCB0byBGaWx0ZXJJ
bWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF5UHJvZHVjZUludmFsaWRQcmVt
dWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weVBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlw
bGllZFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjp0cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6YWJzb2x1
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvbG9yU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlQnVmZmVySWZF
eGlzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Ny
b2xsIGFuaW1hdGlvbiB3aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA5ZDc3NTQ4Y2RlYTBiNDdiMjIwNmJiNThkZTZkM2RhMDg0ZTVjNzQ4Li4yOGQ1
ZGQzYjM1ZWZjNjdlODNlMzRlMmE2MTk1MzUxMmMyMGI3ZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MjEwMCw2ICsyMTAwLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlhYmUx
ODk4NjBkOGRjNTlhOGMwMzQ4ZDU1OWE3N2Q1NDliMGM3NjUuLjU2ZDM3MjkxMjcwYmUzNDY0ZDFi
YTM5MDY4YjRkZTM5Mjk1NWViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODU2LDYgKzEwODU2LDggQEAKIAkJNzIxQjQ5
NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWlu
TWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5N
YXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU5MjksNiArMjU5MzEsOCBA
QAogCQkJCTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAq
LywKIAkJCQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICov
LAogCQkJCTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAor
CQkJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJ
NzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VC
NjMxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VC
NjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA4YjQwMDE3NzAw
ZTEwYzY4N2JhNzA2ZTU1OTZiOGMwYjIzMGJhMjRlLi40OTYxNWZkZTgzZWVkNDMwZmUxZTVjMTU3
OGMwNjliMjM2NjM3MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgUmV0YWluUHRyPENJSW1hZ2U+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRl
ciYKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KICAgICBl
ZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBlZmZlY3Quc2V0
UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAKICAg
ICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXgg
YjM2YjY0N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOC4uYjUyYjhhY2QzODNlYzgz
OTRkOWM3OGE5ZTE4M2Q0NTgyOWViZGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
QEAgLTExMSwxNyArMTExLDE3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8g
c291cmNlUGl4ZWxBcnJheUEgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIElu
dFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5
QiA9IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheUIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKICAg
ICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxl
bmd0aCgpOwogICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlC
LT5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCAxYTEzNzU4ODFlMmEyOTY0MDgwMGNmMjNmY2UwYWRi
MDIxNzE4MDA2Li5jOTFhYTNkNjhkNWRmZjUzMzkxZmUwZDdkOThiNzlhNmI2ZDUyODZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5jcHAKQEAgLTU5LDE2ICs1OSwxNiBAQCBib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVy
MikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAppbmRleCA2NzllNzhkYWVhODczZjVkMzNhMWFmZjg3MTUyNWJmY2Y4Nzcx
MGZiLi41YTkxYzRlY2M0NGZjNzdhYmZmZDQ5ZDdkMTY5N2RjMTRmOTJiNjc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKQEAgLTI3NywxMSArMjc3LDExIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKGlu
QnVmZmVyKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQx
MzQzZTcxOGY0MjAxNWRiNDEyNGM3ZTBhZWZlYS4uZGY4MGUwM2VkZDczMDBlZWU3YjA2YjNhZTQ3
ODNkNzJiNjdiYzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xMDUs
MTIgKzEwNSwxMCBAQCBib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBp
eGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJs
ZSBncmVlblRhYmxlOwogICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKQEAgLTExOCw5ICsxMTYs
MTIgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxl
LCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBk
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7Cisg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJh
d2luZ1JlY3QpOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSBy
ZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAx
XSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggMjVhYzAwODQyNGJkODYzMTE4NDc4OTA5NTBiY2Y2M2U1YWVmNWZhOC4uOWQ5MmUwMThhZGQw
M2ZmYzBiM2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTg3LDE0
ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsK
LX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1
bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1
NSwgMCB9OwpAQCAtMjI5LDM0ICsyMjEsMzUgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAg
YXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCk7CisgICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9
IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlcjIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKICAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCBj
ZmQyNGNhZmViMDU4NjM3MDdiOTRkODlhMDk2N2Y4MTdmYmM4ZDZkLi5hODc2YTk1ZDNmNzE5MmQw
NjJmZjg0YTNhMDZlMGU2ZjMzNzQ2OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC01OSwxMiArNTksMTAg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0g
ICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBt
X3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiAgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAorICAg
IGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0K
KwogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAppbmRleCA5M2Y2ZGY4N2E4Y2JkM2MxNjQyNDNmMjQzNjA0ZGNlZWViODFh
NjY0Li41NGY4MDRhOGZlZDI1MTRlMjIxMDVlYTUyM2JjYmQ0ODU3Nzc3YjhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAKQEAgLTM2NSwyNiArMzY1LDIzIEBAIGJvb2wgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGFscGhhRm9y
bWF0ID0gbV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZDsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKLSAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJj
ZVBpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1
ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKICAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewot
ICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKICAg
ICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwK
ICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApp
bmRleCAyZGZkODU3NmY3ZjFlMDJmMWQwMzQ5MTk1ZGQwYzI1ZjQ2NDQzNmRjLi5lN2MxYTIyOTli
NGU1MDdjNGY2OGI4Njg4YThkMDg1NzdjMDU1NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcApAQCAtNjgsMTMgKzY4LDEzIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxl
KGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xv
clNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UK
ICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUg
J2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xv
ciBzcGFjZS4KLSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRl
ckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JT
cGFjZSgpKTsKKyAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgorICAgIHJldHVy
biBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNv
bnN0IGludCBpbmRleCkKQEAgLTk4LDIzICs5OCwyNSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQVNTRVJU
KG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVs
dGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1
ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhl
bCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlw
bGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5t
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgYXV0byBkaXNwbGFjZW1l
bnRQaXhlbEJ1ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCisgICAgaWYgKCFpbnB1dFBp
eGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudElt
YWdlLT5sZW5ndGgoKSk7CisgICAgYXV0byYgaW5wdXRJbWFnZSA9IGlucHV0UGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBhdXRvJiBkaXNwbGFjZW1lbnRJbWFnZSA9IGRpc3BsYWNlbWVudFBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgQVNTRVJUKGlucHV0SW1hZ2UubGVuZ3RoKCkgPT0gZGlzcGxh
Y2VtZW50SW1hZ2UubGVuZ3RoKCkpOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKIApAQCAtMTM1LDggKzEzNyw4IEBAIGJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7CiAgICAg
ICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0Owog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkg
KyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9u
SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAg
ICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNw
bGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVs
WSkgKyBzY2FsZWRPZmZzZXRZKTsKIAogICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFy
cmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpIHsKQEAgLTE0NCw3ICsxNDYsNyBAQCBib29sIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5h
dGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0
ZXMpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNj
ZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUxMzc2NjQzNjA2YjkyNWUuLjk5MDE0MjYxY2I4MmU5ZGEy
MGI5ZTAzZjhkZWRjMjI1NjgzYzEyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTQ3
LDE4ICs0NywxOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkg
b3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQogCiAgICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFj
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGMxNzM5MGEx
YTc2MjE1ZTE2OTNhM2Q3ZmRiN2JhOTZjMTJkMzllN2IuLmI2MmFiNjg0Y2Q5MWVmYzc3ZjE4YTE2
NGU5NWE0NTk0ZmM3Njg1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0
SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQsNyArODQsNyBAQCBib29sIEZF
RHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAg
ICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJj
ZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFzb3VyY2VJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCAyNDMxZTc5MTU1NDY2OTUwMTc2
NDgxY2QzOWVjZDMwZDI4ZjFhYzZiLi4yODA5YjRiMTc1ZDMyNTVkMjEwNzQ5OTE2ZWIzZWQwNTAx
MzU2NWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9v
ZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogCiBib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oCmluZGV4IDEzMzgyMzFjZWRiMWQ5YTlhN2NmZDkxOGU0ZjM5ZGE2NzA2MWNj
NzEuLjljMTNlNWQ0ZWJhOGM4YzliYzk4NGRjNjM5NDcwYmM0OGM5NDM1ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC0z
OSw4ICszOSw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBu
b3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0
IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mg
b2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJp
ZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7
IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA1MGIyYzFl
MDJkOWQ4OGM5MWZjY2U4NDUyYmJjOTE5ODUxODk0ZDVlLi40YzVmYWIwMWEzMzk1N2U4ZmU5MjE1
NmQ1MDc5MTY3ZDRiZTljMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTIzLDE2ICs1
MjMsMTQgQEAgYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKLQogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgIGlmICghbV9zdGRYICYm
ICFtX3N0ZFkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC01NDMsNiArNTQxLDcgQEAgYm9v
bCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAgICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFn
ZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGU4M2NmM2I3Y2Q2MzY4
NmYxZjQ0MWU1MjI4ZjJjNTZiNGViNGExODIuLmE2OTY1NGFmMjBiYzM5ZTA1ODE0OTkyODNjMmZl
NDg3MmY4ZDMzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNDc1LDIyICs0NzUsMjMgQEAgYm9vbCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBzZXRJc0FscGhh
SW1hZ2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwor
CiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwx
KS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8g
dGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFz
IHN0cmFuZ2UKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFu
ZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252
b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRT
aXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOworCiAgICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQ
YWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMTFiYzg3OTU3ODdlYTQyMTdmMDgwNmY3YzU2M2UwZjU4
YWM1YTAyYy4uY2VhMTk3Y2Y4YTE3NjdjOWRkNGZkNGVlMDMzZjY2ZmZkMWY4MzljYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwCkBAIC00MywxNCArNDMsMTQgQEAgYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBp
ZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCisgICAg
ICAgIGlmIChhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCiAgICAgICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2
Li5iMjIzY2I5ZTU2NjM2OTU5YzNmOTFiODYxZTZkYTE3YzAzNmRhM2M3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC0yMjksNDcgKzIyOSw0NyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGlu
dCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzRGVnZW5lcmF0ZShpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpIGNvbnN0CiB7Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
IHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByYWRpdXNY
IDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwogfQogCiBib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQogICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZm
ZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6
bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAg
aW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJh
ZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisg
ICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNYLCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29w
eVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5n
UmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIH0KKworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CisgICAg
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKICAgICBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CiAgICAg
cGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCmluZGV4IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2
M2QuLmRiODcwYWU3ZGY1MDRlMTljNGQwNTEzZjhkNDIxYjAxZmNjYzFkMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgYm9vbCBpc0RlZ2VuZXJhdGUoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewog
ICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
aW5kZXggMDE0NTU3YTMxZDcwOTcyMzYyMmQ3NjYzMGFhYzcyODNiYjI2NWY3OC4uNDMxNGExYTU2
MTI0ZWQxYzgzNjA5Yzk4YzBiOWZjMWE1ZDIyYzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTY4LDggKzY4
LDggQEAgYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZl
ciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWlu
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCA0ZmUyNGE0ZjI2MmIx
NzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4Li5hOWUyMTMzN2IwZDI3NGU1NDgwZGY2NzYwZjg5
N2M3MjAxOWU1NDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00NCwxMSArNDQsMTAgQEAgRkVUaWxlOjpGRVRpbGUo
KQogCiBib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogewotLy8gRklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsg
YXJvdW5kIGEgY29tcGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVy
d2lzZS4KICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggZGE0NzRm
NDEwNWYxNjRlNGRkZWU0OGI2Y2FiOWRiOGY4M2ExYTdmZS4uMjY1Nzc2NjNjYzYzMjc3YmUyZGFh
MzY0MDk2ODRiMWQ3MjIyNjlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzk1LDcgKzM5NSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogCiBib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA0MWJmYzM2NGEz
MzkwYjY4YjkyMThiMWJmMmZiOTk4MTkzYjdlNDYwLi5hYTEwYTdlZjAxODMwNjJmYjFlNmVlMjA2
N2UzNzhjOTZlZDhiZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywyOSArMjcsMTMgQEAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8
YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKLSAgICA6
IEZpbHRlckZ1bmN0aW9uKHR5cGUpCi17Ci19Ci0KIHZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQogewogICAgIG1fYWJzb2x1dGVQYWlu
dFJlY3QgPSBJbnRSZWN0KCk7CkBAIC0xNTcsNyArMTQxLDYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6
OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIH0KIAogICAgIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGlu
Z0NvbG9yU3BhY2UpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQogICAg
ICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgYXBwbHkoKToiCkBAIC0xNzEsNDY4ICsxNTQsNzYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVxdWlyZXNW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpOworICAgIGlmICghbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBs
aWVkUGl4ZWxzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbiA6IG1faW5wdXRFZmZlY3RzKQor
ICAgICAgICAgICAgaW4tPmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAg
ICB9CisgICAgCisgICAgaWYgKCFjcmVhdGVSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFu
ZCByZXR1cm4gZWFybGllci4KICAgICByZXR1cm4gcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRl
cik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cygpCitib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KCkKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAg
ICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdl
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdCwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZTsKIH0KIAog
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAg
IG1fZmlsdGVySW1hZ2UgPSBudWxscHRyOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCkKIHsKICAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVz
cyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKICAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVz
ZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVz
dWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9p
bnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1
cnNpdmUoKTsKKyAgICBjbGVhclJlc3VsdCgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9p
bnB1dEVmZmVjdHMpCisgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9
CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIC8vIEZJWE1FOiBSZXNwZWN0IHRoZSBGaWx0ZXI6OnJl
bmRlcmluZ01vZGUoKSB3aGVuIGNyZWF0aW5nIHRoZSBmaWx0ZXIgSW1hZ2VCdWZmZXIgcmVzdWx0
LgotICAgIC8vIEZvciBub3cganVzdCBwYXNzIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQu
IFRoaXMgd2lsbCBub3QgYmUgYSBiZWhhdmlvciBjaGFuZ2Ugc2luY2UKLSAgICAvLyB0aGlzIGlz
IHdoYXQgd2UgZG8gZm9yIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgY29kZSBwYXRoIGFueXdheS4KLSAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRD
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZl
cigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVh
ID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tl
ZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChj
aGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNw
YWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+
aW1hZ2VCdWZmZXIoKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitQaXhlbEJ1ZmZlciogRmlsdGVy
RWZmZWN0OjpwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0KQogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhl
bEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0
KTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBi
bGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2Nh
bGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgo
KSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAw
LCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJl
Y3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVj
dC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgp
ID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBh
aW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBz
Y2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkg
ewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9
Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9
IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0g
ICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4
WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5
RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAt
IHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qu
d2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5k
YXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAg
Y29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICog
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlP
cmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQ
aXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2Fu
bGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsr
eU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAg
IHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0
YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29u
c3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1
aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZh
bHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5k
YXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGlu
dCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAg
c291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0g
ICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBy
b3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5k
YXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAg
ICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRp
b24uZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAg
aW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsz
XSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRv
IHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNh
biBkbyBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50
KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENy
ZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6
QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNw
YWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhh
Rm9ybWF0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+cGl4ZWxCdWZmZXIoYWxwaGFGb3Jt
YXQpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRh
cmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
cmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVy
Q29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
d2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29s
b3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwg
dGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRl
ZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBp
bWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFy
Z2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVk
SW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8g
Q29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZl
IHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQp
OwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
ZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVm
ZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBz
dG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRp
b24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRl
ckVmZmVjdDo6Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBo
YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUp
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0
UGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQsIHNvdXJjZVJlY3QsIGNvbG9yU3BhY2UpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UGl4
ZWxCdWZmZXJSZXN1bHQoUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0g
ICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jl
c3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKKyAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CiB9CiAKLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0
UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCkKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUo
KS5jaGFyYWN0ZXJzOCgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
LXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlzKTsKLQotICAg
IC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1
bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3Vs
dFNpemUpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JT
cGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
ZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVy
biBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5h
dGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5h
dGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmICghaGFz
UmVzdWx0KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9maWx0ZXJJbWFnZS0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkK
IHsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50
cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwot
I2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBt
X3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAg
IGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNw
YWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAg
IG1fZmlsdGVySW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0CkBAIC02NDMsOCArMjM0LDggQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICBp
ZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7
CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9y
U3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9y
ZXN1bHRDb2xvclNwYWNlKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29s
b3JzcGFjZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVzdWx0IGNvbG9yc3BhY2UiLCByZXN1bHRDb2xvclNwYWNlKCkpOwogICAgICAgICB0cyA8
PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYzA3NTI2MzE0ZjdlNzc4MTI1ZTAwNTdiYjAzYjExY2Y5ZDAxN2I1Yi4uOTE2YmJlODM0NzFh
NDFhZTI1YjIyYWMyYjg2MThlMmFiNWRlYTYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNyAr
MjIsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0
aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ2LDI2ICs0MCwyMiBAQCBjbGFzcyBJbWFnZUJ1
ZmZlcjsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1
YmxpYzoKKyAgICBib29sIGNyZWF0ZVJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBv
dmVycmlkZTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCisgICAgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVmZmVyUmVzdWx0KFBpeGVsQnVm
ZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSBj
b25zdDsKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKwog
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVm
ZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLnNpemUoKTsgfQogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNp
ZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVy
RWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAg
fHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKQEAgLTEy
Myw4ICsxMTMsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0g
Y29sb3JTcGFjZTsgfQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkgeyBtX3Jlc3VsdENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CisKKyAgICB2
aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
ICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7CkBAIC0xMzgsMzYgKzEyOCwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KFR5cGUpOwotICAgIAotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICB1c2luZyBGaWx0
ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
ZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywg
d2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGlu
IFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBp
bWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vz
c2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmly
dHVhbCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgPSAwOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZm
ZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
Ym9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0g
ICAgCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgUmVmUHRy
PEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBtX2ZpbHRlckltYWdlOwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0
OwogICAgIApAQCAtMTk1LDEyICsxNjcsNyBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCB0aGUg
ZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhl
IGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgogICAgIGJvb2wgbV9jbGlwc1RvQm91bmRz
IHsgdHJ1ZSB9OwogCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3Vs
dENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAogV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzI4NDZl
Y2Q5ZTE4Mzk0ZTE1ZjY3ZTI3NDY0MzNmOTYwMzFlOTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAg
LTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmgi
CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmls
dGVySW1hZ2U6OmNyZWF0ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJz
b2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJ
bWFnZShhYnNvbHV0ZUltYWdlUmVjdCwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworfQor
CitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9hYnNvbHV0ZUltYWdlUmVjdChhYnNvbHV0ZUltYWdl
UmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9jb2xv
clNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1h
Z2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpLCBtX3JlbmRlcmluZ01vZGUsIDEsIG1fY29s
b3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZUJ1ZmZlclJlY3QgPSBJbnRS
ZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9OworCisgICAgaWYgKHBpeGVs
QnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyU2xvdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgaW1hZ2VCdWZmZXJSZWN0KTsKKyAgICBl
bHNlIGlmIChwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCBpbWFnZUJ1
ZmZlclJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZl
ciwgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCit7CisgICAgQVNTRVJUKHNv
dXJjZVBpeGVsQnVmZmVyLnNpemUoKSA9PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNpemUoKSk7
CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2l6
ZSgpOworICAgIHVuc2lnbmVkIHJvd0J5dGVzID0gZGVzdGluYXRpb25TaXplLndpZHRoKCkgKiA0
OworCisgICAgQ29uc3RQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IHNvdXJjZSB7IHNvdXJjZVBp
eGVsQnVmZmVyLmZvcm1hdCgpLCByb3dCeXRlcywgc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRh
dGEoKSB9OworICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRpb24geyBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLmZvcm1hdCgpLCByb3dCeXRlcywgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpIH07CisKKyAgICBjb252ZXJ0SW1hZ2VQaXhlbHMoc291cmNlLCBk
ZXN0aW5hdGlvbiwgZGVzdGluYXRpb25TaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weUltYWdl
Qnl0ZXMoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAg
ICBhdXRvJiBzb3VyY2UgPSBzb3VyY2VQaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byYgZGVz
dGluYXRpb24gPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLmRhdGEoKTsKKworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXJSZWN0ID0gSW50UmVjdCB7IHsgfSwgc291cmNlUGl4ZWxCdWZmZXIuc2l6
ZSgpIH07CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyUmVjdCA9IEludFJlY3QgeyB7
IH0sIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2l6ZSgpIH07CisKKyAgICBhdXRvIHNvdXJjZVJl
Y3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKHNvdXJjZVBpeGVsQnVmZmVyUmVjdCwgc291cmNlUmVj
dCk7CisgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBJbnRSZWN0IHsgeyB9LCBzb3VyY2VSZWN0
Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzb3VyY2VSZWN0LngoKSA8IDApCisgICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5zZXRYKC1zb3VyY2VSZWN0LngoKSk7CisKKyAgICBpZiAoc291cmNl
UmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlvblJlY3Quc2V0WSgtc291cmNlUmVjdC55
KCkpOworCisgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyUmVjdCk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0aW5hdGlvblJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFy
ZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlm
IChkZXN0aW5hdGlvblJlY3Quc2l6ZSgpICE9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXJSZWN0LnNp
emUoKSkKKyAgICAgICAgZGVzdGluYXRpb24uemVyb0ZpbGwoKTsKKworICAgIC8vIEVhcmx5IHJl
dHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAg
IGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgc2l6ZSA9IHNvdXJjZVJlY3RDbGlwcGVkLndpZHRoKCkgKiA0OworICAgIGludCBkZXN0aW5h
dGlvbkJ5dGVzUGVyUm93ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlclJlY3Qud2lkdGgoKSAqIDQ7
CisgICAgaW50IHNvdXJjZUJ5dGVzUGVyUm93ID0gc291cmNlUGl4ZWxCdWZmZXJSZWN0LndpZHRo
KCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRh
KCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRlc3Rp
bmF0aW9uUmVjdC54KCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291
cmNlLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsg
c291cmNlUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc291
cmNlUmVjdENsaXBwZWQuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZUJ5
dGVzUGVyUm93OworICAgIH0KK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYXV0byBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShzb3VyY2VSZWN0LnNpemUoKSk7CisgICAgYXV0
byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0
OjpCR1JBOCk7CisgICAgCisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFw
cGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5v
dGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBzb3VyY2VSZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0
dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNvdXJjZVJl
Y3QpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkK
K3sKKyAgICBhdXRvIHNvdXJjZVJlY3QgPSBJbnRSZWN0IHsgeyB9ICwgc291cmNlUGl4ZWxCdWZm
ZXIuc2l6ZSgpIH07CisgICAgYXV0byBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVk
U2l6ZShzb3VyY2VSZWN0LnNpemUoKSk7CisKKyAgICBhdXRvJiBzb3VyY2VDb2xvclNwYWNlID0g
c291cmNlUGl4ZWxCdWZmZXIuZm9ybWF0KCkuY29sb3JTcGFjZTsKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgMSwgc291cmNlQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHNvdXJjZVBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0
KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBo
YUZvcm1hdCwgc291cmNlUmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBv
ZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4
dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4g
dGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBw
aXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3Bh
Y2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBu
b3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZv
cm1hdCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0
byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclNsb3QoYWxwaGFGb3JtYXQpOworICAgIGlmIChw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworCisgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVm
ZmVyU2xvdCgpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBJbnRTaXplIGxv
Z2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworCisgICAgcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNhbFNpemUpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAg
ICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcygqc291cmNlUGl4ZWxCdWZmZXIsICpwaXhlbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5SW1h
Z2VCeXRlcygqc291cmNlUGl4ZWxCdWZmZXIsICpwaXhlbEJ1ZmZlcik7CisgICAgfQorCisgICAg
cmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBh
bHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc291cmNlUmVjdC5zaXplKCkpKTsKKworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2U/ICpjb2xvclNwYWNlIDogbV9jb2xvclNwYWNlIH07CisKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNvdXJjZVJlY3Quc2l6ZSgpKTsK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgcmV0dXJu
IHBpeGVsQnVmZmVyOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoUGl4
ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QpCit7CisgICAgYXV0byBhbHBoYUZvcm1hdCA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuZm9y
bWF0KCkuYWxwaGFGb3JtYXQ7CisgICAgYXV0byYgY29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIuZm9ybWF0KCkuY29sb3JTcGFjZTsKKworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlclNsb3QoYWxw
aGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZl
cikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZy
b20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
aW1hZ2VCdWZmZXJTbG90KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyB7IH0s
IG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZFBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzb3VyY2VQaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVm
ZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnNvdXJjZVBpeGVsQnVmZmVyLCBhbHBo
YUZvcm1hdCwgY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVy
dGVkUGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMoKnNvdXJjZVBpeGVsQnVm
ZmVyLCBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBzb3VyY2VSZWN0KTsKK30KKwordm9pZCBGaWx0
ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVz
dCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90
IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkg
PSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVs
RGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1h
Z2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBw
aXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGgg
JSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJy
YXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRh
ICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90
IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBz
aXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3
aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3Ro
ICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVu
Z3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBo
YSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUg
KC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGlu
IGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAg
Ly8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVs
IGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7
CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1l
bnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0
ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFk
anVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vs
c2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2Fy
eSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRy
YW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdl
QnVmZmVyLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9y
U3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBz
dGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxv
cHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE2YTk4ZTI3N2VhOTkwOGI4YjZhZmRhZTBjNTcyNDg2ZjAyNTZiN2MKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQ
aXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0
ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0
ZShjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdDsgfQorCisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Cisg
ICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKTsKKyAg
ICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVm
ZmVyKFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KTsKKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFn
ZVJlY3QsIFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJTbG90KCkgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlcjsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlclNs
b3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4pIGNvbnN0OworCisgICAgSW50UmVjdCBtX2Fic29sdXRlSW1hZ2VSZWN0OworCisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
Y29sb3JTcGFjZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCBj
ZmI1NzQ0YTdkYTY2ODY3OWExYmQ4NTE4YWU1YjJkZjNkODJjYTNlLi44ZmE0NDJiOGQ5ZDUzYTk5
ZWY1Y2ExNTg4MjY2MzUwZGE2YmE1ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDcsNyArNDcs
NyBAQCB2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKIAogYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGZhMjEwYzcyMDc0MWU0MzUyNzZl
ZDVlZjIxMWQ3NzI2MzdjOTc3NmMuLmVjZGU0MzFmOWI5YjA2NDQxM2VhMDViNjBkZGNiOTJlNTg5
OGM3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMzQsNyArMzQsNiBAQCBSZWY8U291cmNl
R3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkKIFNvdXJjZUdyYXBoaWM6OlNvdXJjZUdy
YXBoaWMoKQogICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3Jh
cGhpYykKIHsKLSAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKQEAgLTQ1LDcgKzQ0LDcgQEAgdm9pZCBTb3Vy
Y2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKIAogYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3Vy
Y2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDRhMDUwYjE2OTU5OTkxMmQwNzNl
ZmRkN2EzNzAzNTUyOGUzMjUxMmMuLmYwYTI2NWJmNjcwYTk4M2NkNjIxNTA2NWQxNjc4YmEyMjQy
OTI1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIEdyYXBoaWMKICAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewogICAg
ICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAg
ICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0
LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxhc3RF
ZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwogICAgICAgICB9CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRh
OjpCdWlsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAKaW5kZXggNTU0MDBiN2ViYTNlNGY2YzJiZWQ5ODRiY2NiNTFkMjM3ZTM0NDQ3
YS4uM2ZlY2YxZjM0NGUxYzdmNmE2YTJhNjA5MTE5NTIxODRiNjE2ZDYzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTc2
LDEwICs3Niw3IEBAIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAKIGJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3
YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IDM0ZjcxYmE4NDZlYzBmZjJkZDY4MjcwMTZkOWEwNTg5
NGNiNGU4ZDkuLmRhN2U0N2JkMThmNTQ0YTJlNTIzNzcxZDIzOTI3ZDcyMmE5OWFiNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAg
LTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUltYWdlKFNvdXJjZUltYWdl
JiYsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKIAorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGlu
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQorCiAgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBmaW5hbDsKIAog
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFsOwo=
</data>
<flag name="review"
          id="470031"
          type_id="1"
          status="+"
          setter="heycam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445012</attachid>
            <date>2021-11-23 00:33:21 -0800</date>
            <delta_ts>2021-11-23 01:22:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225088-20211123003320.patch</filename>
            <type>text/plain</type>
            <size>93103</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y4MWQ1Mjg0MTUwMDQ5
MDVmNmQ1YWM1NTZiZTAyMDQzYjA1MjI5YS4uNWYxYzc1MmRiZjhhZTI1YzUwYTY0NDM5NWU5ZDM1
MWVkM2MxY2E0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMS0xMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFz
cyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUwODgKKyAgICAgICAgcmRhcjovLzc3NDg3NzYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQ2FtZXJvbiBNY0Nvcm1hY2suCisKKyAgICAgICAgTW92ZSB0aGUgc3RvcmFn
ZSBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQor
ICAgICAgICBGaWx0ZXJFZmZlY3QgdG8gaXRzIGlucHV0cyB0byBhIG5ldyBjbGFzcyBuYW1lZCAn
RmlsdGVySW1hZ2UnLiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0
aW9uIG9mIEZpbHRlckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAg
ICAgIHRoZSBDb3JlSW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5
IGNhbGN1bGF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8g
Y3JlYXRlIHRoZSByZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwg
YmUgb25lIHdheSB3aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhp
cyBjYWxsIHdpbGwKKyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJl
cXVlc3RpbmcgdGhlIEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBG
aWx0ZXJJbWFnZSB3aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW4KKworICAgICAgICBUaGUg
ZGVmYXVsdCBvZiB0aGUgb3BlcmF0aW5nIENvbG9yU3BhY2UgaXMgc1JHQi4gQnV0IGl0IHdpbGwg
YmUgc2V0IHRvCisgICAgICAgIGxpbmVhclJHQiBpZiB0aGUgY29sb3IgaW50ZXJwb2xhdGlvbiBv
ZiB0aGUgZmlsdGVyIGVmZmVjdCBlbGVtZW50IGlzCisgICAgICAgIGxpbmVhclJHQi4gVGhlIG9u
bHkgZXhjZXB0aW9uIGlzIHRoZSBGRUltYWdlIHdob3NlIHJlc3VsdCBoYXMgdG8gYmUgaW4KKyAg
ICAgICAgc1JHQiBhbHdheXMuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHJl
c3VsdCBDb2xvclNwYWNlIGlzIHRoZSBvcGVyYXRpbmcgQ29sb3JTcGFjZS4KKyAgICAgICAgVGhl
IG9ubHkgZXhjZXB0aW9uIGlzIEZFRGlzcGxhY2VtZW50TWFwIHdob3NlIHJlc3VsdCBoYXMgdG8g
YmUgaW4gdGhlCisgICAgICAgIENvbG9yU3BhY2Ugb2YgaXRzIGZpcnN0IGlucHV0IEZpbHRlckVm
ZmVjdC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1h
Z2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhl
IG9wcG9zaXRlCisgICAgICAgIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygp
LiBDb3JyZWN0aW5nIHRoZSBwcmVtdWx0aXBsaWVkCisgICAgICAgIHJlc3VsdCB3aWxsIGJlIGRv
bmUgYnkgRmlsdGVyRWZmZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y3JlYXRlUmVzdWx0KToKKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjbGVhclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZSk6CisgICAgICAgIENsZWFyaW5nIHRoZSByZXN1bHQgY2FuIGJlIGRvbmUg
YnkgbnVsbGlmeWluZyBhIHNpbmdsZSBwb2ludGVyLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6dW5wcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmdldFVucHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmdldFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZh
bGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5h
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24pOiBEZWxldGVkLgorICAg
ICAgICBBbGwgdGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB3YXMgbW92ZWQgdG8gRmlsdGVy
SW1hZ2UuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heVByb2R1Y2VJbnZhbGlkUHJl
bXVsdGlwbGllZFBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5
aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZF
eGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRp
cGxpZWRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNm
b3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmFic29s
dXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpyZW5k
ZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNw
YWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklm
RXhpc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5o
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24oKSB0YWtlIGEgY2xhbXBpbmcgYXJndW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggOGY3OWVjZThjYzdjMDU5OThhOTVmY2EyYjViZTY0MzI3ZWJj
ZTc0MS4uODEzNzJlOTkxM2RmMmE1NjI5Y2YxMTRmZmE2YjhmOTQwODdhMmU4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTIxMDMsNiArMjEwMyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9ucy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwNGU5Njk4NDRkZmJmMzhmNzk1Y2NjZmU2YmJjNjU0YTdlMDdlYTJiLi43YjRkMjFkYTli
MmY0ZDg1NWE4MTNjYTlhOTEzZTViMjg3NDAxNmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDg2Nyw2ICsxMDg2Nyw4IEBA
CiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCaXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFj
a2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZy
YW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlcklt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBF
WFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVu
ZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1OTQ1LDYg
KzI1OTQ3LDggQEAKIAkJCQk3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0
VmVjdG9yLmggKi8sCiAJCQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0
aW9uLmNwcCAqLywKIAkJCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rp
b24uaCAqLywKKwkJCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3Bw
ICovLAorCQkJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovLAog
CQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAog
CQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJ
CQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXgg
OGI0MDAxNzcwMGUxMGM2ODdiYTcwNmU1NTk2YjhjMGIyMzBiYTI0ZS4uNDk2MTVmZGU4M2VlZDQz
MGZlMWU1YzE1NzhjMDY5YjIzNjYzNzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAtMTE2LDcgKzExNiw2IEBAIFJldGFpblB0cjxD
SUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhj
b25zdCBGaWx0ZXImCiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAg
ICB9CiAgICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAg
ZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CiAgICAgCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oCmluZGV4IGIzNmI2NDdkZWJlMDFmN2M2NzNiZjY0NDRjNWY5MmYzM2ExODExZTguLmI1MmI4
YWNkMzgzZWM4Mzk0ZDljNzhhOWUxODNkNDU4MjllYmRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oCkBAIC0xMTEsMTcgKzExMSwxNyBAQCBib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXlBID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsK
KyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7
CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNl
UGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0
KTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5nZXRQaXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1Jl
Y3QpOwogCiAgICAgdW5zaWduZWQgc291cmNlUGl4ZWxBcnJheUxlbmd0aCA9IHNvdXJjZVBpeGVs
QXJyYXlBLT5sZW5ndGgoKTsKICAgICBBU1NFUlQocGl4ZWxBcnJheUxlbmd0aCA9PSBzb3VyY2VQ
aXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggMWExMzc1ODgxZTJhMjk2NDA4MDBj
ZjIzZmNlMGFkYjAyMTcxODAwNi4uYzkxYWEzZDY4ZDVkZmY1MzM5MWZlMGQ3ZDk4Yjc5YTZiNmQ1
Mjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCkBAIC01OSwxNiArNTksMTYgQEAgYm9vbCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVy
MiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFp
bWFnZUJ1ZmZlcjIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwg
eyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOwogICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggNjc5ZTc4ZGFlYTg3M2Y1ZDMzYTFhZmY4NzE1
MjViZmNmODc3MTBmYi4uNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0OWQ3ZDE2OTdkYzE0ZjkyYjY3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNzcsMTEgKzI3NywxMSBAQCBib29sIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9
IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIGlmIChpbkJ1ZmZlcikKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDk3
N2NhNWI1Nzg0MTM0M2U3MThmNDIwMTVkYjQxMjRjN2UwYWVmZWEuLmRmODBlMDNlZGQ3MzAwZWVl
N2IwNmIzYWU0NzgzZDcyYjY3YmM4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cApAQCAtMTA1LDEyICsxMDUsMTAgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAg
TG9va3VwVGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7CkBAIC0x
MTgsOSArMTE2LDEyIEBAIGJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwg
Z3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxl
bmd0aCgpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIGRyYXdpbmdSZWN0KTsKKyAgICAKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgdWludDhfdCogZGF0YSA9
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25Q
aXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOworCiAgICAg
Zm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgZGVzdGluYXRpb25Q
aXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFbcGl4ZWxP
ZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVs
T2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuY3BwCmluZGV4IDI1YWMwMDg0MjRiZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTguLjlk
OTJlMDE4YWRkMDNmZmMwYjNmNjhhZTIwNjZmYjE2MGYyNjQ0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CkBAIC04NywxNCArODcsNiBAQCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCk7Ci19Ci0gICAgCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMp
CiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGMpLCAyNTUsIDAgfTsKQEAgLTIyOSwzNCArMjIxLDM1IEBAIGJvb2wgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIEZpbHRlckVmZmVjdCog
aW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRvIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAg
ICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkp
CisgICAgICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQnVm
ZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0
QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQo
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgICAgIGluMi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogCi0gICAgICAgIHBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXks
IG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5
ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICAgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgICAgICBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVs
QXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHcmFwaGljc0Nv
bnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFn
ZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
ciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CiAg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmgKaW5kZXggY2ZkMjRjYWZlYjA1ODYzNzA3Yjk0ZDg5YTA5NjdmODE3ZmJjOGQ2ZC4uYTg3NmE5
NWQzZjcxOTJkMDYyZmY4NGEzYTA2ZTBlNmYzMzc0NjhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNTks
MTIgKzU5LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVDb21wb3NpdGUoY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQog
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKKyAgICBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDOyB9CisKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggOTNmNmRmODdhOGNiZDNjMTY0MjQzZjI0MzYw
NGRjZWVlYjgxYTY2NC4uNTRmODA0YThmZWQyNTE0ZTIyMTA1ZWE1MjNiY2JkNDg1Nzc3N2I4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zNjUsMjYgKzM2NSwyMyBAQCBib29sIEZF
Q29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byBhbHBoYUZvcm1hdCA9IG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7
CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoYWxw
aGFGb3JtYXQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0g
ICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51
bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
aWYgKCFzb3VyY2VQaXhlbEFycmF5KQorICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+
Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YSA9IHsKLSAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCisgICAgICAgIHNvdXJjZVBpeGVs
QXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRTaXpl
LndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKaW5kZXggMmRmZDg1NzZmN2YxZTAyZjFkMDM0OTE5NWRkMGMyNWY0NjQ0MzZkYy4u
ZTdjMWEyMjk5YjRlNTA3YzRmNjhiODY4OGE4ZDA4NTc3YzA1NTZiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKQEAgLTY4LDEzICs2OCwxMyBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKQorY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6
cmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogVGhlICdjb2xvci1pbnRl
cnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byB0aGUgJ2luMicgc291
cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5IHRvIHRoZSAnaW4nIHNvdXJjZSBp
bWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVtYWluIGluIGl0cwogICAgIC8vIGN1
cnJlbnQgY29sb3Igc3BhY2UuCi0gICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGF0IHNtYWUgY29s
b3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUgJ2luJyBpbWFnZS4K
LSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoaW5wdXRFZmZlY3QoMCktPnJl
c3VsdENvbG9yU3BhY2UoKSk7CisgICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGF0IHNhbWUgY29s
b3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUgJ2luJyBpbWFnZS4K
KyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPnJlc3VsdENvbG9yU3BhY2UoKTsKIH0KIAogdm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCkBAIC05OCwyMyArOTgsMjUgQEAgYm9vbCBGRURpc3Bs
YWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBB
U1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBhdXRvIGlu
cHV0UGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKIAogICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2Ug
PSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIGF1dG8g
ZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZWZmZWN0QkRyYXdpbmdSZWN0KTsK
ICAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQorICAgIGlm
ICghaW5wdXRQaXhlbEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNw
bGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOworICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBpbnB1dFBp
eGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFj
ZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgp
ID09IGRpc3BsYWNlbWVudEltYWdlLmxlbmd0aCgpKTsKIAogICAgIEludFNpemUgcGFpbnRTaXpl
ID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAKQEAgLTEzNSw4ICsxMzcsOCBAQCBib29s
IEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewogICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBz
dGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UuaXRlbShk
ZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7
CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29s
b3JZICogZGlzcGxhY2VtZW50SW1hZ2UuaXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2Vt
ZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkKiBk
ZXN0aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKICAgICAgICAgICAgIGlm
IChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNy
Y1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CkBAIC0xNDQsNyArMTQ2LDcgQEAgYm9vbCBGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5w
dXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMp
KTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihpbnB1dEltYWdlLmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNy
Y1ksIHJvd0J5dGVzKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
aAppbmRleCAzY2QwNWNjNDk1NTE3MTk5YWNkYzg4ZWQ1MTM3NjY0MzYwNmI5MjVlLi45OTAxNDI2
MWNiODJlOWRhMjBiOWUwM2Y4ZGVkYzIyNTY4M2MxMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oCkBAIC00NywxOCArNDcsMTggQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0gICAgdm9p
ZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3Vs
dENvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVycmlkZTsKKworICAgIGJvb2wg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRl
eCBjMTczOTBhMWE3NjIxNWUxNjkzYTNkN2ZkYjdiYTk2YzEyZDM5ZTdiLi5iNjJhYjY4NGNkOTFl
ZmM3N2YxOGExNjRlOTVhNDU5NGZjNzY4NThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC03Myw3
ICs3Myw3IEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBp
ZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg0LDcgKzg0LDcg
QEAgYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1Jl
Z2lvbik7CiAgICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCi0gICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghc291
cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggMjQzMWU3OTE1
NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQyOGYxYWM2Yi4uMjgwOWI0YjE3NWQzMjU1ZDIxMDc0OTkx
NmViM2VkMDUwMTM1NjVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgRkVGbG9v
ZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKIAogYm9vbCBGRUZsb29kOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCAxMzM4MjMxY2VkYjFkOWE5YTdjZmQ5MThlNGYz
OWRhNjcwNjFjYzcxLi45YzEzZTVkNGViYThjOGM5YmM5ODRkYzYzOTQ3MGJjNDhjOTQzNWUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaApAQCAtMzksOCArMzksNyBAQCBwdWJsaWM6CiAjaWYgIVVTRShDRykKICAgICAvLyBmZUZs
b29kIGRvZXMgbm90IHBlcmZvcm0gY29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28g
dGhlIHJlc3VsdCBpcyBhbHdheXMgaW4gdGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBzcGFjZSBy
ZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0g
ICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KKyAgICB2
b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGUgeyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5k
ZXggNTBiMmMxZTAyZDlkODhjOTFmY2NlODQ1MmJiYzkxOTg1MTg5NGQ1ZS4uNGM1ZmFiMDFhMzM5
NTdlOGZlOTIxNTZkNTA3OTE2N2Q0YmU5YzBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAg
LTUyMywxNiArNTIzLDE0IEBAIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1
bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICBpZiAo
IW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNTQzLDYgKzU0
MSw3IEBAIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5
LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBlODNj
ZjNiN2NkNjM2ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRhMTgyLi5hNjk2NTRhZjIwYmMzOWUwNTgx
NDk5MjgzYzJmZTQ4NzJmOGQzM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTQ3NSwyMiArNDc1LDIz
IEBAIGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAg
c2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5j
b3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdp
bmdSZWN0KTsKKwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVy
IHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRh
cmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZp
cmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRM
ZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3
YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgog
CiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKKwogICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJyYXks
IGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDExYmM4Nzk1Nzg3ZWE0MjE3ZjA4MDZm
N2M1NjNlMGY1OGFjNWEwMmMuLmNlYTE5N2NmOGExNzY3YzlkZDRmZDRlZTAzM2Y2NmZmZDFmODM5
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcApAQCAtNDMsMTQgKzQzLDE0IEBAIGJvb2wgRkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9m
RWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKIAotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1
bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsK
LSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpKQorICAgICAgICBpZiAoYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
KQogICAgICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggNDMyODhkOWU1OTJmMDI4MjgzODQyZTc5MjRiNzEx
NWZjOGY2YzI3Ni4uYjIyM2NiOWU1NjYzNjk1OWMzZjkxYjg2MWU2ZGExN2MwMzZkYTNjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcApAQCAtMjI5LDQ3ICsyMjksNDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgcGxh
dGZvcm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsK
IH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xh
bXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCBy
YWRpdXNYLCBpbnQgcmFkaXVzWSkKK2Jvb2wgRkVNb3JwaG9sb2d5Ojppc0RlZ2VuZXJhdGUoaW50
IHJhZGl1c1gsIGludCByYWRpdXNZKSBjb25zdAogewotICAgIGlmIChyYWRpdXNYIDwgMCB8fCBy
YWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAK
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZm
ZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0KICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgSW50U2l6ZSByYWRpdXMgPSBmbG9v
cmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKLSAgICBpZiAocGxh
dGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKGlzRGVnZW5l
cmF0ZShyYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkgeworICAgICAgICBpbi0+Y29w
eVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5n
UmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5
ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCiAgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyU2NhbGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAgICAgaW50IHJhZGl1
c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRo
KCkpOwogICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0
KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwogCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVy
YXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJh
ZGl1c1kpKQorICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkpIHsKKyAgICAg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZm
ZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICB9CisKKyAg
ICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGE7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEFycmF5Lmdl
dCgpOworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gJnNvdXJjZVBpeGVsQXJyYXk7
CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5
OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5o
ZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCAyODhlZWEwZTFlMjEzY2UzMmQ4MTczMGI2MTk5
ZGQ1ZTA0MWM5NjNkLi5kYjg3MGFlN2RmNTA0ZTE5YzRkMDUxM2Y4ZDQyMWIwMWZjY2MxZDE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVn
ZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYg
aW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIGJvb2wgaXNEZWdlbmVy
YXRlKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgUGFpbnRp
bmdEYXRhIHsKICAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuY3BwCmluZGV4IDAxNDU1N2EzMWQ3MDk3MjM2MjJkNzY2MzBhYWM3MjgzYmIyNjVmNzgu
LjQzMTRhMWE1NjEyNGVkMWM4MzYwOWM5OGMwYjlmYzFhNWQyMmM0ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBA
IC02OCw4ICs2OCw4IEBAIGJvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1
dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNGZl
MjRhNGYyNjJiMTc0MjJlNzgzYjQ3NjBmMzMxNTAxODUyZGMxOC4uYTllMjEzMzdiMGQyNzRlNTQ4
MGRmNjc2MGY4OTdjNzIwMTllNTQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtNDQsMTEgKzQ0LDEwIEBAIEZFVGls
ZTo6RkVUaWxlKCkKIAogYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFj
ayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhh
dmlvciBvdGhlcndpc2UuCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGlu
QnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8
fCAhaW5CdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmlu
ZGV4IGRhNDc0ZjQxMDVmMTY0ZTRkZGVlNDhiNmNhYjlkYjhmODNhMWE3ZmUuLjI2NTc3NjYzY2M2
MzI3N2JlMmRhYTM2NDA5Njg0YjFkNzIyMjY5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTM5
NSw3ICszOTUsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVn
aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKIAogYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXgg
NDFiZmMzNjRhMzM5MGI2OGI5MjE4YjFiZjJmYjk5ODE5M2I3ZTQ2MC4uYWExMGE3ZWYwMTgzMDYy
ZmIxZTZlZTIwNjdlMzc4Yzk2ZWQ4YmUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjcsMjkg
KzI3LDEzIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQot
I2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2lu
Y2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlIHR5
cGUpCi0gICAgOiBGaWx0ZXJGdW5jdGlvbih0eXBlKQotewotfQotCiB2b2lkIEZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikKIHsKICAgICBtX2Fi
c29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwpAQCAtMTU3LDcgKzE0MSw2IEBAIGJvb2wgRmls
dGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB9CiAKICAgICBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2Uo
bV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0KICAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGFwcGx5KCk6IgpAQCAtMTcxLDQ2OCArMTU0LDc2IEBAIGJvb2wgRmlsdGVy
RWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKKyAgICBpZiAoIW1heVByb2R1Y2VJbnZhbGlk
UHJlbXVsdGlwbGllZFBpeGVscygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaW4gOiBtX2lucHV0
RWZmZWN0cykKKyAgICAgICAgICAgIGluLT5jb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVl
ZGVkKCk7CiAgICAgfQorICAgIAorICAgIGlmICghY3JlYXRlUmVzdWx0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlv
bnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCiAgICAgcmV0dXJuIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShmaWx0ZXIpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVJlc3VsdCgpCiB7Ci0gICAg
Ly8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMg
Y2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0g
aW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5
Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBh
bmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsK
LQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0
aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4
ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5j
cmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVl
blBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxz
LnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZh
bFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRl
ZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5Q
aXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChw
aXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0
OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBh
ZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1Q
aXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhl
bAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFt
cCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRp
b24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAg
ICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3Ig
YWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQorICAgIG1fZmlsdGVySW1hZ2UgPSBG
aWx0ZXJJbWFnZTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3QsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc3VsdENvbG9yU3BhY2UoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1h
Z2U7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7Ci0gICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVs
bG9wdDsKKyAgICBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsKIH0KIAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiB7CiAgICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMs
IHJlZ2FyZGxlc3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCiAgICAgLy8gYSByZXN1bHQu
IENhbiBiZSB1c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBjbGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQg
c2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKCk7CisgICAgY2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSgpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3Vs
dCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpOwotCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICAvLyBGSVhNRTogUmVzcGVjdCB0aGUg
RmlsdGVyOjpyZW5kZXJpbmdNb2RlKCkgd2hlbiBjcmVhdGluZyB0aGUgZmlsdGVyIEltYWdlQnVm
ZmVyIHJlc3VsdC4KLSAgICAvLyBGb3Igbm93IGp1c3QgcGFzcyBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkLiBUaGlzIHdpbGwgbm90IGJlIGEgYmVoYXZpb3IgY2hhbmdlIHNpbmNlCi0gICAg
Ly8gdGhpcyBpcyB3aGF0IHdlIGRvIGZvciB0aGUgc29mdHdhcmUgZmlsdGVyIGNvZGUgcGF0aCBh
bnl3YXkuCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEs
IG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1h
Z2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50UmVjdCBk
ZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0
aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3Bh
Y2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgYXV0byBj
aGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAg
aWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVj
dCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7CisgICAgcmV0dXJuIG1fZmls
dGVySW1hZ2UtPmltYWdlQnVmZmVyKCk7CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorUGl4ZWxCdWZm
ZXIqIEZpbHRlckVmZmVjdDo6cGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCkKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsK
LSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93Pigp
ICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQor
ICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHNjYWxl
ZFJlY3QocmVjdCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJh
bnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCi0g
ICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVk
UmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFko
KSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9u
LmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAgLy8gRWFybHkgcmV0dXJu
IGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCi0gICAgaWYg
KHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2Fs
ZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+
PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4
T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAoeE9y
aWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdpbiA9
IDA7Ci0gICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7Ci0gICAgaWYgKHhF
bmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50
U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKLSAgICBp
bnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAgICB5RGVzdCA9IC15
T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHlFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKLQotICAgIGludCBzaXpl
ID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBz
Y2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBh
aW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVz
dGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkg
KiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgo
eU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKLQotICAg
IHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhl
bCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3Rp
bmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOwot
ICAgICAgICArK3lPcmlnaW47Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxz
ZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0g
ICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVh
KCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVz
dGluYXRpb24uZGF0YSgpOwotCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewot
ICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0p
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICog
NDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJv
d0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
Pihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0Lndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwot
I2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgp
OwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUu
YXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9
IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7
Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFs
cGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsx
XSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFn
ZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNz
YXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsK
LSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZm
ZXIKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5h
dGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFy
Z2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3Jt
YXQoKS5hbHBoYUZvcm1hdCk7CisgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPnBpeGVsQnVmZmVy
KGFscGhhRm9ybWF0KTsKIH0KIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQ
aXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8g
aGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIDEsIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYg
KCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAv
LyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcg
ZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBp
eGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5n
ZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0
LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIg
PSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZm
ZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0
cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMg
dGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRv
IGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFj
b252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVz
KGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBGaWx0ZXJFZmZlY3Q6OmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewogICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
RmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVu
bXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRo
ZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9y
U3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0
aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JT
cGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwot
ICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwg
aW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRp
b24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgcmV0dXJuIG1fZmlsdGVy
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGFscGhhRm9ybWF0LCBzb3VyY2VSZWN0LCBjb2xvclNwYWNl
KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVj
dDo6Y29weVBpeGVsQnVmZmVyUmVzdWx0KFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSBjb25zdAogewogICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0
ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAg
ICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNl
KCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0KLSAgICAgICAgICAgIEFTU0VS
VChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVz
dWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29u
dmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgbV9maWx0ZXJJbWFnZS0+Y29weVBpeGVsQnVmZmVy
KGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOwogfQogCi1JbWFnZUJ1ZmZlciog
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCit2b2lkIEZpbHRlckVmZmVj
dDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpCiB7Ci0gICAgTE9HKEZpbHRl
cnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBm
aWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAg
Ly8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3Vs
dCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhp
cyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7
Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0
dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17
Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMpOwotCi0gICAg
Ly8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3Vs
dCgpKTsKLSAgICBBU1NFUlQoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhyZXN1bHRTaXplKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jl
c3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1Bp
eGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBl
eHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNv
bG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlu
cHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMK
LSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAh
PSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFS
QU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKKyAg
ICBpZiAoIWhhc1Jlc3VsdCgpIHx8ICFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhl
bHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmlsdGVySW1hZ2UtPmNvcnJlY3RQcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIoKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpCiB7Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2Ug
YWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xv
clNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9y
U3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxs
eSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZwotICAgIC8vIGNv
bG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFy
cmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVz
dGluYXRpb25Db2xvclNwYWNlKTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRlc3RpbmF0
aW9uQ29sb3JTcGFjZTsKLQotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51
bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0j
ZW5kaWYKKyAgICBtX2ZpbHRlckltYWdlLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKIH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdApAQCAtNjQzLDggKzIzNCw4IEBAIFRleHRTdHJlYW0mIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UCiAgICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRl
YnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCBtX2FscGhhSW1hZ2Up
OwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNlIiwgbV9vcGVy
YXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3Jz
cGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3Bl
cmF0aW5nIGNvbG9yc3BhY2UiLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKICAg
ICAgICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCmluZGV4IGMwNzUyNjMxNGY3ZTc3ODEyNWUwMDU3YmIwM2IxMWNmOWQwMTdiNWIuLjkx
NmJiZTgzNDcxYTQxYWUyNWIyMmFjMmI4NjE4ZTJhYjVkZWE2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApA
QCAtMjIsMTcgKzIyLDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00NiwyNiArNDAsMjIgQEAgY2xh
c3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6CisgICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKICAgICB2b2lkIGNsZWFy
UmVzdWx0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAor
ICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJJbWFnZTsgfQorCiAg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZv
aWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlclJlc3Vs
dChQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCkgY29uc3Q7CisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVl
ZGVkKCk7CisKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJu
IG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25l
ZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJl
dHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNS
ZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0
Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25l
IGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAg
ICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQogICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAg
ICAgCkBAIC0xMjMsOCArMTEzLDggQEAgcHVibGljOgogCiAgICAgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRp
bmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsg
fQorCisgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9y
U3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNv
bnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9y
U3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpOwpAQCAtMTM4LDM2ICsxMjgsMTggQEAgcHVibGljOgogICAgIH0K
IAogcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdChUeXBlKTsKLSAgICAKLSAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
dXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogCi0gICAgLy8gUmV0dXJuIHRy
dWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdC
QSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNv
bXBvbmVudCBpbiBbMCwgYWxwaGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEgcHJlLW11
bHRpcGxpZWQgaW1hZ2UsIGNoZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVj
dCBpZiBuZWNlc3NhcnkuCi0gICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OworICAgIHZpcnR1YWwgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJl
Y3QoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpID0gMDsKIAotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJU
b0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYs
IFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhlbEJ1
ZmZlciYpOwotICAgIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAot
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJl
ZlB0cjxGaWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0
ZVBhaW50UmVjdDsKICAgICAKQEAgLTE5NSwxMiArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBT
aG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQg
dG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KICAgICBib29sIG1fY2xp
cHNUb0JvdW5kcyB7IHRydWUgfTsKIAotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xv
clNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCiAg
ICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0jZW5kaWYKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsK
IH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODQzMDI1OGVmMmE3MjVmYTFmYzNmMWU0Yzg3YTkwMDkwZWQ0ZWYzMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2UuY3BwCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyQ29u
dmVyc2lvbi5oIgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFy
bV9uZW9uLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVy
SW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRmlsdGVySW1hZ2UoYWJzb2x1dGVJbWFnZVJlY3QsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3Bh
Y2UpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEludFJlY3QmIGFic29s
dXRlSW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJz
b2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAg
ICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVy
SW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdNb2Rl
LCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXJS
ZWN0ID0gSW50UmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKworICAg
IGlmIChwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlclNs
b3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCksIGltYWdlQnVmZmVyUmVj
dCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJTbG90KEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSwgaW1hZ2VCdWZmZXJSZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwor
fQorCitzdGF0aWMgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNl
UGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQoreworICAg
IEFTU0VSVChzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkgPT0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci5zaXplKCkpOworCisgICAgYXV0byBkZXN0aW5hdGlvblNpemUgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLnNpemUoKTsKKyAgICB1bnNpZ25lZCByb3dCeXRlcyA9IGRlc3RpbmF0aW9uU2l6ZS53
aWR0aCgpICogNDsKKworICAgIENvbnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmlldyBzb3VyY2Ug
eyBzb3VyY2VQaXhlbEJ1ZmZlci5mb3JtYXQoKSwgcm93Qnl0ZXMsIHNvdXJjZVBpeGVsQnVmZmVy
LmRhdGEoKS5kYXRhKCkgfTsKKyAgICBQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IGRlc3RpbmF0
aW9uIHsgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5mb3JtYXQoKSwgcm93Qnl0ZXMsIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSB9OworCisgICAgY29udmVydEltYWdlUGl4ZWxz
KHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uU2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZlciwgUGl4
ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QpCit7CisgICAgYXV0byYgc291cmNlID0gc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpOworICAg
IGF1dG8mIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5kYXRhKCk7CisKKyAg
ICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyUmVjdCA9IEludFJlY3QgeyB7IH0sIHNvdXJjZVBpeGVs
QnVmZmVyLnNpemUoKSB9OworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlclJlY3QgPSBJ
bnRSZWN0IHsgeyB9LCBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNpemUoKSB9OworCisgICAgYXV0
byBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihzb3VyY2VQaXhlbEJ1ZmZlclJlY3Qs
IHNvdXJjZVJlY3QpOworICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gSW50UmVjdCB7IHsgfSwg
c291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc291cmNlUmVjdC54KCkgPCAw
KQorICAgICAgICBkZXN0aW5hdGlvblJlY3Quc2V0WCgtc291cmNlUmVjdC54KCkpOworCisgICAg
aWYgKHNvdXJjZVJlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFkoLXNv
dXJjZVJlY3QueSgpKTsKKworICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoZGVzdGluYXRp
b25QaXhlbEJ1ZmZlclJlY3QpOworICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGlu
YXRpb25SZWN0LnNpemUoKSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0
byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJj
ZS4KKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyUmVjdC5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnplcm9GaWxsKCk7CisKKyAgICAv
LyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNv
dXJjZS4KKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW50IHNpemUgPSBzb3VyY2VSZWN0Q2xpcHBlZC53aWR0aCgpICogNDsKKyAgICBp
bnQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXJSZWN0Lndp
ZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VCeXRlc1BlclJvdyA9IHNvdXJjZVBpeGVsQnVmZmVy
UmVjdC53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGlu
YXRpb24uZGF0YSgpICsgZGVzdGluYXRpb25SZWN0LnkoKSAqIGRlc3RpbmF0aW9uQnl0ZXNQZXJS
b3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQ
aXhlbCA9IHNvdXJjZS5kYXRhKCkgKyBzb3VyY2VSZWN0Q2xpcHBlZC55KCkgKiBzb3VyY2VCeXRl
c1BlclJvdyArIHNvdXJjZVJlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IHNvdXJjZVJlY3RDbGlwcGVkLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgbWVtY3B5
KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRp
b25QaXhlbCArPSBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OworICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGF1dG8g
Y2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoc291cmNlUmVjdC5zaXplKCkp
OworICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBjb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOworICAgIAorICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAvLyBDb2xvciBzcGFjZSBjb252
ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVm
ZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9
OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0
LCBzb3VyY2VSZWN0KTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdl
dENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZlciwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgYXV0byBzb3VyY2VSZWN0ID0gSW50UmVjdCB7IHsgfSAsIHNvdXJj
ZVBpeGVsQnVmZmVyLnNpemUoKSB9OworICAgIGF1dG8gY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUoc291cmNlUmVjdC5zaXplKCkpOworCisgICAgYXV0byYgc291cmNlQ29s
b3JTcGFjZSA9IHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpLmNvbG9yU3BhY2U7CisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIHNvdXJjZUNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihzb3VyY2VQaXhlbEJ1ZmZlciwg
c291cmNlUmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1
ZmZlciwgYWxwaGFGb3JtYXQsIHNvdXJjZVJlY3QsIGNvbG9yU3BhY2UpOworfQorCitib29sIEZp
bHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYg
VVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQg
dGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9u
bHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlm
ZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxh
dGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9
ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFj
ZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJTbG90KEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRl
ckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQor
eworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KTsK
KyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUo
KTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsK
KyAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX2ltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7CisgICAgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSht
X2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNpemUpKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGxvZ2ljYWxTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKGF1
dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJTbG90KEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoKnNvdXJj
ZVBpeGVsQnVmZmVyLCAqcGl4ZWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChh
dXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoKnNv
dXJjZVBpeGVsQnVmZmVyLCAqcGl4ZWxCdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiAmcGl4
ZWxCdWZmZXIudmFsdWUoKTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVy
SW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKHNvdXJjZVJlY3Quc2l6ZSgpKSk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlPyAqY29s
b3JTcGFjZSA6IG1fY29sb3JTcGFjZSB9OworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzb3VyY2VSZWN0LnNpemUoKSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvcHlQaXhl
bEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNvdXJjZVJlY3QpOworICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAg
IGF1dG8gYWxwaGFGb3JtYXQgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhh
Rm9ybWF0OworICAgIGF1dG8mIGNvbG9yU3BhY2UgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLmZv
cm1hdCgpLmNvbG9yU3BhY2U7CisKKyAgICBhdXRvKiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVs
QnVmZmVyU2xvdChhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJTbG90KGFscGhhRm9ybWF0KS52
YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpIHsKKyAgICAg
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCisgICAgICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAg
ICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKCptX2ltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFj
ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRQaXhlbEJ1
ZmZlciwgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgc291cmNlUmVjdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc291cmNlUGl4
ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAg
aWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAg
ICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KCpzb3VyY2VQaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIGNvbG9yU3BhY2UpKQorICAgICAgICAg
ICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZFBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBzb3VyY2VSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJ
bWFnZUJ5dGVzKCpzb3VyY2VQaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgc291
cmNlUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1
bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4
Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRh
dGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBp
bnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBt
dXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBB
U1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4
X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4K
KyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxE
YXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVl
blBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRl
ZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5Q
aXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFf
dTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAg
ICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhl
bERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisK
KyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJy
YXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQg
bnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIg
ZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRz
IGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8v
IEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoo
cGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhh
LCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAg
ICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0
YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQor
ICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAg
ICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09
IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBh
dm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24g
YnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7
cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhp
cy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAg
bV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjcyYzNlMDgwZTljOTFiNjQ0
ZTM1OGQ1ZDk3ZjYxMmY2OWVlYThlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0
ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEludFJlY3QmIGFic29sdXRl
SW1hZ2VSZWN0LCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsK
KworICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29s
dXRlSW1hZ2VSZWN0OyB9CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6
bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOworCisgICAgdm9pZCBj
b3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKK3ByaXZhdGU6CisgICAg
RmlsdGVySW1hZ2UoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKwor
ICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1fYWJz
b2x1dGVJbWFnZVJlY3Q7CisKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAg
ICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgUmVmUHRyPEltYWdl
QnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1f
dW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwCmluZGV4IGNmYjU3NDRhN2RhNjY4Njc5YTFiZDg1MThhZTViMmRm
M2Q4MmNhM2UuLjhmYTQ0MmI4ZDlkNTNhOTllZjVjYTE1ODgyNjYzNTBkYTZiYTU4NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiBib29sIFNvdXJjZUFs
cGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
aW5kZXggZmEyMTBjNzIwNzQxZTQzNTI3NmVkNWVmMjExZDc3MjYzN2M5Nzc2Yy4uZWNkZTQzMWY5
YjliMDY0NDEzZWEwNWI2MGRkY2I5MmU1ODk4YzcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBA
IC0zNCw3ICszNCw2IEBAIFJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KQogU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCiAgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiB2b2lkIFNvdXJjZUdy
YXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQpA
QCAtNDUsNyArNDQsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiBib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
aW5kZXggNGEwNTBiMTY5NTk5OTEyZDA3M2VmZGQ3YTM3MDM1NTI4ZTMyNTEyYy4uZjBhMjY1YmY2
NzBhOTgzY2Q2MjE1MDY1ZDE2NzhiYTIyNDI5MjUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTI0
MSw3ICsyNDEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBpZiAoIWxhc3RF
ZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmls
dGVyRGF0YTo6QXBwbHlpbmc7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+YXBwbHko
KTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
OworICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5l
ZWRlZCgpOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KICAgICAgICAgZmls
dGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCA1NTQwMGI3ZWJhM2U0
ZjZjMmJlZDk4NGJjY2I1MWQyMzdlMzQ0NDdhLi4zZmVjZjFmMzQ0ZTFjN2Y2YTZhMmE2MDkxMTk1
MjE4NGI2MTZkNjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcApAQCAtNzYsMTAgKzc2LDcgQEAgdm9pZCBGRUltYWdlOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogYm9vbCBGRUlt
YWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAg
Ly8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggMzRmNzFi
YTg0NmVjMGZmMmRkNjgyNzAxNmQ5YTA1ODk0Y2I0ZThkOS4uZGE3ZTQ3YmQxOGY1NDRhMmU1MjM3
NzFkMjM5MjdkNzIyYTk5YWI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCisgICAgLy8gRkVJ
bWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkK
KyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikgb3ZlcnJpZGUgeyB9CisKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYpIGZpbmFsOwogCiAgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgZmluYWw7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>